马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
原题链接
方法一:两层for循环方法
- class Solution {
- public int[] twoSum(int[] nums, int target) {
- int len=nums.length;
-
- int[] res=new int[2];
- for(int i=0;i<len;i++){
- for(int j=i+1;j<len;j++){
- if(nums[i]+nums[j]==target){
- res[0]=i;
- res[1]=j;
- }
- }
- }
- return res;
- }
- }
复制代码 什么时间使用哈希法,当我们需要查询一个元素是否出现过,或者一个元素是否在聚集里的时间,就要第一时间想到哈希法。
本题需要一个聚集来存放我们遍历过的元素,然后在遍历数组的时间去询问这个聚集,某元素是否遍历过,也就是 是否出如今这个聚集。
那么我们就应该想到使用哈希法了。
因为本题,我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适。
方法二:使用哈希表
- class Solution {
- public int[] twoSum(int[] nums, int target) {
- int[] res=new int[2];
- if(nums==null||nums.length==0){
- return res;
- }
- Map<Integer,Integer>map=new HashMap<>();
- for(int i=0;i<nums.length;i++){
- int tmp=target-nums[i];
- if(map.containsKey(tmp)){
- res[0]=i;
- res[1]=map.get(tmp);
- break;
- }
- map.put(nums[i],i);
- }
- return res;
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |