[劍指Offer]-和爲S的兩個數字

題目描述

輸入一個遞增排序的數組和一個數字s,在數組中查找兩個數,使得它們的和正好是s,如果有多對數字的和等於s,輸出任意一對即可。

解題思路

  • 一般思路,定位一個數據,再找另一個求和直到等於S。時間複雜度O(n^)
  • 高效方法:時間複雜度O(n)
    • 定義兩個指針分別指向數組首位
    • 如果當前之和大於S,則前移尾指針
    • 如果當前之和小於S,則後移頭指針
算法圖解

在這裏插入圖片描述

參考代碼:
package offer;

/**
 * 和爲s的數字
 * 輸入一個遞增排序的數組和一個數字s,在數組中查找兩個數,使得它們的和正好是s,如果有多對數字的和等於s,輸出任意一對即可。
 */
public class Offer57 {
    public static void main(String[] args) {
        int nums[] = {1, 2, 4, 7, 11, 15};
        findNumberWithSum(nums, 15);
    }

    static void findNumberWithSum(int nums[], int s) {
        if (nums == null || s <= 0 || nums.length < 1) {
            return;
        }
        int small = 0;
        int big = nums.length - 1;
        while (small < big) {
            int sum = nums[small] + nums[big];
            if(sum<s){
                small++;
            }
            if(sum>s){
                big--;
            }
            sum=nums[small]+nums[big];
            if(sum==s){
                System.out.println(nums[small]+"-"+nums[big]);
                break;
            }
        }
    }
}


附錄

該題源碼在我的 ?Github 上面!

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