LeetCode1-两数之和【Java实现】
文章目录
题目详情
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
你可以按任意顺序返回答案。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
# 输入与输出案例
示例一:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例二:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例三:
输入:nums = [3,3], target = 6
输出:[0,1]
二、题目分析
1.选择Java文件实现,题目要求写一个twoSum函数,函数参数为(int[] nums, int target);并且返回一个int[]类型的数组。
代码如下(示例):
public int[] twoSum(int[] nums, int target) {
int len = nums.length;
int[] result = new int[2];
for (int i = 0; i < len; i++) {
if(Math.abs(nums[i]) <= Math.abs(target) && target != 0){
result[0] = i;
int m = contains(nums, target - nums[i],i+1);
if(m != -1 ){
result[1] = m;
break;
}
}
if(Math.abs(nums[i]) <= Math.abs(target) || target == 0 || nums[i] <= target){
result[0] = i;
int m = contains(nums, target - nums[i],i+1);
if(m != -1 ){
result[1] = m;
break;
}
}
if(nums[i] > target){
result[0] = i;
int m = contains(nums, target - nums[i],i+1);
if(m != -1 ){
result[1] = m;
break;
}
}
}
return result;
}
2.添加一个辅助函数:public int contains(int[] data, int e,int m)
contains函数 : 从索引值为m的数组值开始遍历到数组末尾,找寻是否存在与e相等的数组值,若存在返回其索引值,若不存在返回值-1.
代码如下(示例):
public int contains(int[] data, int e,int m){
int index = -1;
for (int i = m; i < data.length; i++) {
if(data[i] == e)
index = i;
}
return index;
}
总结
这是笔者第一次在LeetCode上解答出相关的编程题,同时也是第一次创作相关的CSND博文,肯定存在很多的不足之处,望大家多多指教,笔者也会持续更新博文与改进代码。以期待降低空间复杂度。
LeetCode运行结果截图
辅助测试代码,方便大家学习
一下是我在Intellij IDEA上用的测试代码,包含主函数Main与一个用于打印输出的函数。方便大家学习与测试自己的代码。 注释部分是另外的几个测试用例,如果能通过所有的用例,这道题就基本被破解了。
public static void main(String[] args) {
// int[] nums = new int[]{2,7,11,9};
// int target = 9; // 输出结果[0,1]正确
// int[] nums = new int[]{};
// int target = ;
//
// int[] nums = new int[]{3,2,4};
// int target = 6; // 输出[1,2]正确
// int[] nums = new int[]{3,3};
// int target = 6; // 输出[0,1]正确
// int[] nums = new int[]{2,7,11,15};
// int target = 9;
// int[] nums = new int[]{0,4,3,0};
// int target = 0;
// int[] nums = new int[]{-1,-2,-3,-4,-5};
// int target = -8;
// int[] nums = new int[]{-3,4,3,90};
// int target = 0;
// int[] nums = new int[]{-10,7,19,15};
// int target = 9;
int[] nums = new int[]{3,2,95,4,-3};
int target = 92;
int[] ints = twosum(nums, target);
Arrayprint(ints);
}
public static void Arrayprint(int[] Arrays){
System.out.print("[");
for (int i = 0; i < Arrays.length; i++) {
if(i != Arrays.length - 1)
System.out.print(Arrays[i]+",");
else
System.out.println(Arrays[i]+"]");
}
}