剑指 Offer 57. 和为s的两个数字

题目:

思路:

【1】基于双循环暴力破解的方式也是可以做的,基于辅助空间Set的做法也是可以做的(单次遍历,碰到set里面能够组合成结果的就将两个返回)

【2】循环加双指针的处理方式

代码展示:

循环加双指针的处理方式:

//时间1 ms击败99.72%
//内存60.3 MB击败35.14%
//时间复杂度O(N),最多遍历整个数组
//空间复杂度O(1)
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[]{-1,-1};
    }
}

 

posted @ 2023-02-13 16:04  忧愁的chafry  阅读(13)  评论(0编辑  收藏  举报