[leetCode 丶 20241129] 1. 两数之和

原题:

https://leetcode.cn/problems/two-sum/description/


描述:

描述


个人版答案

执行用时: 2 ms 执行内存消耗: 44.16 M

class Solution { public int[] twoSum(int[] nums, int target) { if(nums.length == 2 && (nums[0] + nums[1]) == target){ return new int[]{0,1}; } int[] res = new int[2]; Map<Integer/* value */, Integer/* index */> map = new HashMap<>(); for(int i = 0; i< nums.length;i++){ int v= target - nums[i]; Integer index = map.get(nums[i]); if(index == null){ map.put(v, i); }else{ return new int[]{i, index}; } } return res; } }

优秀解法

执行耗时: 0 ms

class Solution { public int[] twoSum(int[] nums, int target) { return twoSum2(nums,target); } private int[] twoSum2(int[] nums, int target) { HashMap<Integer,Integer> map = new HashMap(); for(int i=0,j=nums.length-1;i<=j;i++,j--) { if(map.containsKey(target-nums[i])) { return new int[]{map.get(target-nums[i]),i}; } map.put(nums[i],i); if(map.containsKey(target-nums[j])) { return new int[]{map.get(target-nums[j]),j}; } map.put(nums[j],j); } return new int[0]; } }

个人解题思路与优秀答案解析

题目分析及个人版思路

  1. 第一题... 我寻思求和呗. 然后我就遍历了两两和...emmm...代码如下
class Solution { public int[] twoSum(int[] nums, int target) { int[] soultion = new int[2]; for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j < nums.length; j++) { if (nums[i] + nums[j] == target) { soultion[0] = i; soultion[1] = j; } } } return soultion; } }

62ms...我看着前面的0ms..陷入了沉思.
2. 说起来也做了两周了吧? 要展示一下...冥思苦想...好好好...用target - 自己. 得到的结果放到map里.顺序遍历, 如果从结果中拿到了自己...那就取出下标. 因为题目限制了, 只有一个正确答案, 所以...嘿嘿, 上代码展示
3. 2ms...给自己一个赞

进阶版思路
果然我还是太嫩, 双向遍历...看到了...就等于学到了