力扣两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
import java.lang.reflect.Array;
import java.util.Scanner;
import java.util.Arrays;
public class TwoSum {
@SuppressWarnings("resource")
public static void main(String[] args) {
//法一:运行时,进行输入
/*int[] nums= {0,0,0,0};
int target;
Scanner input = new Scanner(System.in);
System.out.println("Please input target:");
target=input.nextInt();
System.out.println("Please input array nums:");
for(int i=0; i<4; i++) {
nums[i]=input.nextInt();
}
input.close();
System.out.println(Arrays.toString(TwoSum(nums, target)));
*/
//法二;直接初始化
int[] nums = {2,7,11,15};
int target = 9;
System.out.println(Arrays.toString(TwoSum(nums, target)));
}
public static 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[j]==target-nums[i]) {
int[] sub = new int[] {i,j};
return sub;
//return new int[] {i,j};
}
}
}
throw new IllegalArgumentException("No two sum solution");
}
}
总结几点学到的:
1.数组长度
数组名.length 可以利用数组长度限制循环次数
2.函数返回值
声明的函数类型是int[ ],所以函数返回值也应该是int[ ]。有两种返回方式:一、先声明一个int[ ],再返回(int[] sub = new int[] {i,j};return sub;)二、直接声明和返回一起(return new int[] {i,j};)
3.抛出异常
throw new IllegalArgumentException(“No two sum solution”);这个是力扣官方答案上很好的一点,加上了异常的抛出,可以在没有结果时,显示异常信息“No two sum solution”
4.在eclipse里面写的代码,所以自己加上了main方法
可以采用法一所示运行时输入的方式,也可以直接在main方法里把变量初始化
5.input.close()
在法一中,声明了input,相当于给输入分配了内存空间。但如果不注意,就会出现’input’ is never closed的错误,意思是分配的内存空间没有收回,会造成内存浪费。
解决方法:
所以应该在不用input的时候,调用input.close()把内存收回。
也可以直接把input.close();放在main方法最后
6.nextInt() (Scanner的方法之一)
意思是将输入的下一个信息作为int类型输入
(Scanner还有很多next相关的方法,如nextFloat(),nextLong(),nextBoolean()等等)
7.异常InputMisMatchException
意思:输入不匹配
出现原因:比如用的的nextInt(),而输入的却是字符串,输入的和应该输入的类型不匹配
解决方法:可以利用try-catch捕获异常,提醒用户“输入不匹配,请重新输入”,直到输入匹配为止
8.数组的输出Arrays.toString()
既然TwoSum函数返回是int[ ],所以在main方法里输出方式应采用数组的输出方法Arrays.toString(参数),即把数组转换成String输出,其中参数可以是long,float,double,int,boolean,byte,object型的数组。
错误示范:
System.out.println(TwoSum(nums,target));
输出为I@15db9742
正确示范:
System.out.println(Arrays.toString(TwoSum(nums,target)));
输出为[0,1]
做力扣的第一个题都有这么多问题,看来以后路还长着。。。