力扣兩數之和
給定一個整數數組 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]
做力扣的第一個題都有這麼多問題,看來以後路還長着。。。