想法:
1.哈希表hashmap
第一种方法:将数组中元素及其下标right都加入hashmap中,对于每个元素n下标left,在map中查找是否有target-n的元素,若有,则返回其下标right
第二种方法:从第一个元素x下标left开始,若哈希表中无target-x的元素,则将key-x,value-left的键值对放入hashmap中,直至left=数组nums的长度-1;期间若找到元素,则返回left和right。
官方代码:
 1 class Solution {
 2     public int[] twoSum(int[] nums, int target) {
 3         Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
 4         for (int i = 0; i < nums.length; ++i) {
 5             if (hashtable.containsKey(target - nums[i])) {
 6                 return new int[]{hashtable.get(target - nums[i]), i};
 7             }
 8             hashtable.put(nums[i], i);
 9         }
10         return new int[0];
11     }
12 }
13 
14 
15 作者:LeetCode-Solution
16 链接:https://leetcode-cn.com/problems/two-sum/solution/liang-shu-zhi-he-by-leetcode-solution/
17 来源:力扣(LeetCode)
18 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

我写的:

 1 class Solution {
 2     public int[] twoSum(int[] nums, int target) {
 3          Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
 4         int x = 0;
 5         //从第一个元素x下标i开始
 6         for(int i = 0;i<nums.length;i++){
 7             //直至left=数组nums的长度-1
 8             x = target-nums[i];
 9             if(hashtable.containsKey(x)){
10                 //若哈希表中无target-x的元素,则将key-x,value-left的键值对放入hashmap中
11                 return new int[]{hashtable.get(x), i};
12                 //期间若找到元素,则返回left和right。
13             }else{
14                 hashtable.put(nums[i],i);
15             }
16         }
17         return new int[0];       
18     }
19 }

 

 
2.暴力流:
下标left和right,当left为空,不断移动right,找到两个下标对应元素相加为target,返回这两个下标。复杂度n²

 

posted on 2022-08-01 13:48  Jolyne123  阅读(50)  评论(0编辑  收藏  举报