[剣は申し出を指す] 57。合計はsの2つの数です

タイトル説明

ここに画像の説明を挿入します
ここに画像の説明を挿入します

// 57. 和为s的两个数字



// 力扣
// 输入一个递增排序的数组和一个数字s,在数组中查找两个数,
// 使得它们的和正好是s。如果有多对数字的和等于s,则输出任意
// 一对即可。


// 牛客
// 输入一个递增排序的数组和一个数字S,在数组中查找两个数,
// 使得他们的和正好是S,如果有多对数字的和等于S,输出两个
// 数的乘积最小的。

回答


// 力扣
// 前后双指针,求的和sum与target比较,
// sum大了,右指针左移,减小sum,
// sum小了,左指针右移,增大sum。
// 执行用时:2 ms, 在所有 Java 提交中击败了94.94%的用户
// 内存消耗:55.3 MB, 在所有 Java 提交中击败了72.04%的用户

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int left = 0, right = nums.length - 1;
        while (left < right) {
            if (nums[left] + nums[right] > target) {
                right--;
            }
            else if (nums[left] + nums[right] < target) {
                left++;
            }
            else { 
                return new int[]{nums[left], nums[right]};
            }
        }
        return new int[0];
    }
}



// 牛客
// 运行时间:10ms,超过89.79%用Java提交的代码
// 占用内存:9512KB,超过10.62%用Java提交的代码
import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        ArrayList<Integer> res = new ArrayList<Integer>(2);
        int left = 0, right = array.length - 1;
        while (left < right) {
            if (array[left] + array[right] > sum)
                right--;
            else if (array[left] + array[right] < sum)
                left++;
            else {
                res.add(array[left]);
                res.add(array[right]);
                return res;
            }
        }
        return res;
    }
}




おすすめ

転載: blog.csdn.net/fisherish/article/details/114915145