1. 程式人生 > >LeetCode TwoSum(兩和)

LeetCode TwoSum(兩和)

LeetCode 每日一題

****LeetCode 每日一題:
給定一個整數陣列,返回兩個數字的索引,使它們相加到一個特定的目標。
您可以假設每個輸入都只有一個解決方案,而您可能不會使用相同的元素兩次。
列:給定nums = [2,7,11,15],target = 9,
因為nums [ 0 ] + nums [ 1 ] = 2 + 7 = 9,
返回[ 0,1 ]。**

public static void main(String[] args) {

        //int[] num = new int[] {150,24,79,50,88,345,3};
        //int[] num = new int[] {3,3};
//int[] num = new int[]{3,2,4}; //int[] num = new int[]{0,1,2,0}; int[] num = new int[] {230,863,916,585,981,404,316,785,88,12,70,435,384,778,887, 755,740,337,86,92,325,422,815,650,920,125,277,336,221,847,168,23,677,61, 400,136,874,363,394,199,863,997,794,587
,124,321,212,957,764,173,314,422, 927,783,930,282,306,506,44,926,691,568,68,730,933,737,531,180,414,751,28, 546,60,371,493,370,527,387,43,541,13,457,328,227,652,365,430,803,59,858, 538,427,583,368,375,173,809,896,370,789}; int target = 666; if(num.length < 3
) { if(num[0] + num[1] == target) { System.out.print("0 1"); } }else{ int[] twoSum = twoSum(num,target); for (int i = 0; i < twoSum.length ; i++) { if(twoSum[0] == twoSum[1]) { throw new IllegalArgumentException ("No two sum solution"); } System.out.print(twoSum[i]+" "); } } } public static int[] twoSum(int num[],int target) { int temp = num.length; if(num.length > 5) { temp = num.length - 1 ; } int q = 0; int e = 0; for (int i = 0; i < temp ; i++) { for (int j = i+1; j < temp; j++) { //先判斷是否等於這個值 if(num[i] + num[j] == target ) { q = num[i]; e = num[j]; } } //找到第一個 繼續找下一個 if(num[i] == q) { q = i; continue; } //找到第二個直接中斷迴圈 if(num[i] == e) { e = i; break; } } return new int[] {q,e}; }

大家有沒有更好的思路,讓程式執行更快一點呢?

這裡寫圖片描述