LeetCode167 兩數之和輸入有序數組

LeetCode167
在這裏插入圖片描述

雙指針:首位指針向數組中間進行推進,

package KTwoPointers;

/**
 * @Author Zhou  jian
 * @Date 2020 ${month}  2020/5/5 0005  11:41
 * 兩數之和----輸入有序數組
 * 使用雙指針,一個指針指向較小的元素,一個指向值較大的元素,指向較小的元素的指針從頭向尾遍歷
 * 如果兩個指針指向元素的和 sum == targetsum==target,那麼得到要求的結果;
    如果 sum > targetsum>target,移動較大的元素,使 sumsum 變小一些;
    如果 sum < targetsum<target,移動較小的元素,使 sumsum 變大一些
      指向較大的元素的指針從尾相投遍歷
 *
 */
public class Problem167 {

    public int[] twoSum(int[] numbers, int target) {

         int[] rs = new int[2];

         //定義兩個指針,從兩端向中間逼近
         int left = 0;
         int right = numbers.length-1;

         while(left<right){

             //計算兩個數的和
             int sum = numbers[left]+numbers[right];

             //兩數==target
             if(sum==target){
                 rs[0]=left+1;
                 rs[1]=right+1;
                 return rs;
             }else if(sum<target){
                 left++;
             }else if(sum>target){
                 right--;
             }

         }

        return rs;
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章