Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.java
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2.git
Note:github
Example:less
Input: numbers = [2,7,11,15], target = 9 Output: [1,2] Explanation: The sum of 2 and 7 is 9. Therefore index1 = 1, index2 = 2.
/** * 簡單一點 咱們就所有遍歷一遍 * @param numbers * @param target * @return */ public static int[] twoSum(int[] numbers, int target) { int sum[] = new int[2]; int i= 0,j=0; //這裏使用break加標誌符號跳出指定循環,其實也能夠加一個boolean值判斷 out:for (;i<numbers.length;i++){ for(j=i+1;j<numbers.length;j++){ if(numbers[i]+numbers[j] == target){ break out; } } } sum[0]=++i; sum[1]=++j; return sum; } /** * 在1的基礎上優化一下 * @param numbers * @param target * @return */ public static int[] twoSum2(int[] numbers, int target) { int sum[] = new int[2]; int i= 0,j=0; //這裏使用break加標誌符號跳出指定循環,其實也能夠加一個boolean值判斷 out:for (;i<numbers.length;i++){ for(j=i+1;j<numbers.length;j++){ //若是是已經排好序的 那麼大於target的時候就不用比較了 if(numbers[i]+numbers[j] > target){ //j=numbers.length-1; break; } if(numbers[i]+numbers[j] == target){ break out; } } } sum[0]=++i; sum[1]=++j; return sum; } /* 這樣的時間複雜度就下降了不少 O(n),比起上面的O(n^2) */ public static int[] twoSum3(int[] numbers, int target) { int low = 0; int high = numbers.length - 1; while(low < high){ if(numbers[low] + numbers[high] < target){ low++; continue; } else if (numbers[low] + numbers[high] > target){ high--; continue; } else { return new int[] {low+1, high+1}; } } return null; }
git:https://github.com/woshiyexinjie/leetcode-xin/tree/master/src/main/java/com/helloxin/leetcode/algorithms優化