[leetCode 丶 20241129] 1. 两数之和
原题: 1.两数之和
描述:
个人版答案
执行用时: 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];
}
}
个人解题思路与优秀答案解析
题目分析及个人版思路
- 第一题... 我寻思求和呗. 然后我就遍历了两两和...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...给自己一个赞
进阶版思路
果然我还是太嫩, 双向遍历...看到了...就等于学到了
打卡
打卡
666
好好好
再次打卡
好,看到就等于学到了
666
佬
牛牛牛,催更今天的
哈哈哈哈 忘了这茬了. 晚上吧