Leet code 第一题 两数之和 JAVA python

Leet code 第一题 两数之和 JAVA python_第1张图片
一开始用了两个For 循环写的,看了官方的解决方案发现复杂度太高,时间复杂度为O(N2)。

然后发现用Hashmap更加简单一点:

JAVA:
class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map map=new HashMap<>();
        for (int i=0;i            int complement= target-nums[i];
            if(map.containsKey(complement)){
                return new int[] {map.get(complement),i};
            }
            map.put(nums[i], i);
        }
      throw new IllegalArgumentException("No two sum solution");
    }
}
先是求target减去第i个数字还需要多少,然后如果它在map里就返回它和i的下标
如果不存在,就把它和下标存进map。
例:
【2,9,11,15】target=13
i=0; nums[i]=2; complement=13-2=11;不在;把2,0存进map
i=1;nums[i]=9;complement=13-9=4;map:2 不在;把9,1存进map
i=2;nums[i]=11;complement=13-11=2;map:2,9 在; 返回下标0,2。

Python:
python里的字典就像java里的HashMap,以键值对的方式存在并操作

class Solution:
    def twoSum(self, nums, target):
        map={}
        r=[]
        for i in range(0,len(nums)):
            complement=target-nums[i]
           
            if complement in map:
                #print(complement)
                r.append(map[complement])
                r.append(i)
                return r
         
            else :
                map[nums[i]]=i
哈哈哈 折腾了好久 不过总算是弄出来了
犯了个小错误 把增加map字典写成了map={nums[i]:i},所以每次map都在刷新而不是新增一个

蠢蠢的

你可能感兴趣的:(Leet code 第一题 两数之和 JAVA python)