LeetCode刷题:1.两数之和

LeetCode刷题:1.两数之和

一、题目梗概

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/two-sum

二、解答(java):

方案一:循环遍历,逐个尝试,时间复杂度为O(n^2)

class Solution {

public int[] twoSum(int[] nums, int target) {

int a=0;

int b=0;

for(int i=0;i

for(int j=i+1;j

if(target==nums[i]+nums[j]){

a=i;b=j;

break;

}

}

}

int[] result={a,b};

return result;

}

}

方案二:利用哈希表寻找另一个数,时间复杂度为O(n)

class Solution {

public int[] twoSum(int[] nums, int target) {

int a=0;

int b=0;

HashMap map=new HashMap();

for(int i=0;i

/*注意要在判断存在之后再放值,不然nums[a]等于nums[b]时,map中存入的下标值会被覆盖

题目要求nums[a]+nums[b]=target

此时假定nums[a]为nums[i],

所以另一个要求的map应该是{target-nums[i]:b}*/

if(map.containsKey(target-nums[i])){

/*如果存在此map,则进行寻找对应的下标ab*/

a = i;

b = map.get(target-nums[i]);

/*因为是先放值,后找存在,所以a>b*/

return new int[]{b,a};

}

/*按顺序放入当前的第i个元素,{nums[i]:i}

即map中的k-v关系应为{数组中第i个元素的值:第i个元素的下标}*/

map.put(nums[i],i);


}

return new int[]{a,b};

}

}

展开阅读全文

页面更新:2024-03-06

标签:目标值   下标   复杂度   之和   整数   数组   顺序   题目   元素   答案   时间

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top