必刷算法100题之俩数之和

题目链接

LCR 179. 查找总价格为目标值的两个商品 - 力扣(LeetCode)

题目解析

1> 给的数组是有序的

2> 只要返回任意一个结果即可

算法原理

        解法一:

        暴力(连续俩个for):枚举所有的情况:O(n^2)

        

        解法二:

        因为数组有序,因此我们利用单调性,使用双指针算法来解决问题O(n)

        1> 定义left,right,sum

        2> 判断sum和target的大小

                 sum <target left++;

                 sum> target right--;

                sum = target 返回最终结果       

        

代码编写

class Solution {
     public static int[] twoSum(int[] price, int target) {
        //返回的结果数组
        int[] res = new int[2];
        //此时给定的数组是有序的
        //定义left和right
        int left = 0;
        int right = price.length -1;

        while (left < right) {
            int sum = price[left] + price[right];
            if(sum < target) {
                //此时说明我们要增大这个数,因此,我们移动left
                left++;
            }else if (sum > target){
                //此时说明我们要减小这个数,因此,我们移动right
                right--;
            }else {
                //此时相等,我们就保存它们,并且结束循环
                res[0] = price[left];
                res[1] = price[right];
                break;
            }
        }
        return res;
    }
}

        注意:

        注意这一行不能写在循环上面,不然这个sum就是一个固定值了,sum是会随着left和right指向的不同元素而进行变化的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值