leetcode (1. Two Sum)
阿新 • • 發佈:2018-12-08
順便複習了一下陣列知識
Java初始化陣列的方式有三種:方式一:
int[] array={1,2,3};
方式二:
int[] array=new int[3];
方式三:
int[] array=new int[]{1,2,3};
注意方式二與方式三的差別,
方式二等號右邊的中括號有數字(表示陣列長度),
方式三等號右邊的中括號無數字。
先研究最簡單的暴力法,以後再去研究其他高效率辦法
程式碼段:
暴力遍歷法
public 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]) { return new int[] { i, j }; } } } throw new IllegalArgumentException("No two sum solution"); }
首先,int型別的函式要有return,這裡就是 throw new IllegalArgumentException("No two sum solution");
其次,這裡很有意思nums[j] == target - nums[i],因為如果寫 target == num1 + num2;
很容易導致溢位的情況,如果 a+b>c =>a>c-b可以防止用➕溢位 (這是聽了justjavac的講座聽來的)
然後 return new int[] { i, j }; return 的是一個新建的陣列,就該用陣列去承接他,
所以開始我寫完整的程式main方法去測試時,就會出問題,後來才明白要用一個數組去承接他,java基礎真是薄弱啊!
main方法
public static void main(String[] args) {
Twosum a = new Twosum();
int nums[] = {2,7,11,15};
int[] array=a.twoSum(nums, 18);
System.out.println(array[0]+" "+array[1]);
}
這樣就可以把返回的數組裡的兩個數都打印出來了