当前位置:   article > 正文

LeetCode 1《A + B 问题》_leetcode a+b

leetcode a+b

Two Sum

原题链接:点这里
Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
  • 1
  • 2
  • 3
  • 4

第一种解法

暴力循环
利用两次循环求出满足条件的结果

代码:

public int[] twoSum(int[] nums, int target) {
		for(int i=0;i<nums.length;i++)
		for(int j=i+1;j<nums.length;j++)
		{
			if(nums[i]+nums[j]==target)
				return new int[] {i,j};
		}
		return null;
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

时间复杂度:o(n2)

第二种解法

由第一种解法可知,第二层循环主要目的是为了寻找是否有**target-nums[i]**这个值,所以我们想到了找一个容器,也就是map,来直接告诉我们这个值是否存在。
map中key不能重复,需要考虑到这一点。

public int[] twoSum(int[] nums, int target) {
		  
	      Map<Integer,Integer> dataMap=new HashMap<>();
	      for(int i=0;i<nums.length;i++)
	      {
	    	  Integer index = dataMap.get(nums[i]);
	    	  if(Objects.nonNull(index)&&nums[i]+nums[i]==target)
	    		  {return new int[] {index,i};}
	    	  dataMap.put(nums[i], i);
	      }
	      for(int i=0;i<nums.length;i++)
	      {
	    	  Integer index=dataMap.get(target-nums[i]);
	    	  if(Objects.nonNull(index)&&index!=i)
	    		  return new int[] {i,index};
	      }
	    	  return null;
	
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/175555?site
推荐阅读
相关标签
  

闽ICP备14008679号