有人相爱,有人夜里开车看海,有人Leetcode第一题都做不出来
目录
一、两数之和
难度:简单 |
给定一个整数数组 nums 和一个整数目标值 target ,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 |
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 |
示例 1: |
输入:nums = [2,7,11,15], target = 9 输出:[0,1] |
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 |
解题思路
题目中所说“数组中同一个元素在答案里不能重复出现”,若答案不止一个的话,我们可以新建一个数组用来记录nums是否被录入过要返回的值中。
代码一
class Solution {
public int[] twoSum(int[] nums, int target) {
int end[]=new int [2];
for(int x=0;x<nums.length-1;x++)
for(int y=x+1;y<nums.length;y++)
if(nums[x]+nums[y]==target)
{
end[0]=x;
end[1]+=y;
return end;
}
return null;
}
}
虽然这段代码能过,但是执行用时并不是很理想,而且不符合题目标准。
代码二
class Solution {
public int[] twoSum(int[] nums, int target) {
int index[]=new int[nums.length]; //记录nums是否被录入
int notes[]=new int [nums.length];
int i=0;
for(int x=0;x<nums.length;x++)
index[x]=1; //1为未被记录 0为被记录
for(int x=0;x<nums.length-1;x++)
for(int y=x+1;y<nums.length&&index[y]!=0;y++)
if(nums[x]+nums[y]==target)
{
notes[i++]+=x;
notes[i++]+=y;
index[x]=0;
index[y]=0;
continue;
}
int end[]=new int [i];
for(int x=0;x<i;x++)
end[x]=notes[x];
return end;
}
}
代码二的执行用时也不太行,但是符合题目标准且代码的简易度小白一样就能懂。
如果代码有问题,欢迎联系博主修改!