1. 程式人生 > >leetcode (1. Two Sum)

leetcode (1. Two Sum)

順便複習了一下陣列知識

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]);
		
	}
	
這樣就可以把返回的數組裡的兩個數都打印出來了