開啓力扣刷題之路——兩數之和

力扣兩數之和

給定一個整數數組 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]

做力扣的第一個題都有這麼多問題,看來以後路還長着。。。

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