算法(一)

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

第一种方法暴力求解:

双层循环遍历数组,然后判读(nums[i]==target-nums[j]),然后返回指定的元素下标。

 

class Solution {
public int[] twoSum(int[] nums, int target) { for(int i=0;i){ for(int j=i+1;j){ if(nums[i]==target-nums[j]){ return int[]{i,j}; } } } throw new IllegalArgumentException("没有这两个数"); }}

2.两遍哈希表:
可以把哈希表理解为一个数组,每个索引对应一个存储位置,哈希表的索引并不像普通数组的索引那样,从0到length-1,而是由关键字(数据本身)通过哈希函数得到
哈希表中的主要函数
1。创建哈希表 Map<> map=new HashMap<>();
2.添加元素到哈希表中 map.put();
3.查看哈希表中是否包含元素map.containsKey();
4.已知数的到数的索引 map.get();
class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            map.put(nums[i], i);//将数组对应的数组下标,存储到哈希表中
        }
        for (int i = 0; i < nums.length; i++) {
            int complement = target - nums[i];
//判断条件
if (map.containsKey(complement) && map.get(complement) != i) { return new int[] { i, map.get(complement) }; } } throw new IllegalArgumentException("No two sum solution"); } }
 
  

 

 

你可能感兴趣的:(算法(一))