开启力扣刷题之路——两数之和

力扣两数之和

给定一个整数数组 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]

做力扣的第一个题都有这么多问题,看来以后路还长着。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章