当前位置: 首页 > article >正文

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

White graces:个人主页

🙉专栏推荐:Java入门知识🙉

🐹今日诗词:西山白雪三城戍,南浦清江万里桥🐹


⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏

⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏


目录

 题目描述

题目解析

正常思路(暴力解法)

双指针算法

代码

复杂度分析

美图分享


 题目描述

链接: LCR 179. 查找总价格为目标值的两个商品

购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。

示例 1:

输入:price = [3, 9, 12, 15], target = 18
输出:[3,15] 或者 [15,3]

示例 2:

输入:price = [8, 21, 27, 34, 52, 66], target = 61
输出:[27,34] 或者 [34,27]

提示:

  • 1 <= price.length <= 10^5
  • 1 <= price[i] <= 10^6
  • 1 <= target <= 2*10^6

题目解析

正常思路(暴力解法)

正常思路: 两个for循环,计算两数和的所有可能情况, 然后与target比较, 但是这样会超时

双指针算法

双指针算法: 这个数组是升序数组(这点非常重要),

定义两个指针,分别在数组左右两端,left, right

情况1: price[left] + price[right] > target

大于目标值说明右边指针大了,应该right--才能接近目标值

情况2: price[left] + price[right] < target

小于目标值,说明左指针小了,应该left++才能接近目标值

情况3: price[left] + price[right] == target

等于目标值, 说明找到了,left和right对应的值就是答案

代码

循环终止条件: left++, right--, 当他们相遇说明没找到, 因此循环条件是 while (left < right)

class Solution {
    public int[] twoSum(int[] price, int target) {
        // 定义左右指针
        int left = 0;
        int right = price.length - 1;

        // 数组存储答案
        int[] arr = new int[2];
        while (left < right) {
            if (price[left] + price[right] > target) {
                right--;
            } else if(price[left] + price[right] < target) {
                left++;
            } else {
                arr[0] = price[left];
                arr[1] = price[right];
                // 找到一种情况就可以跳出循环了
                break;
            }
        }
        return arr;
    }
}

复杂度分析

美图分享

✨🎆谢谢你的阅读和耐心!祝愿你在编程的道路上取得更多的成功与喜悦!"🎆✨🎄

⭐️点赞收藏加关注,学习知识不迷路⭐️

🎉✔️💪🎉✔️💪🎉✔️💪🎉✔️💪🎉

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️


http://www.kler.cn/a/393437.html

相关文章:

  • 每日一题 343. 整数拆分
  • Unity中LineRenderer使用MeshCollider方法参考
  • 光谱相机的工作原理
  • 查询 MySQL 默认的存储引擎(SELECT @@default_storage_engine;)
  • 观察者模式和发布-订阅模式有什么异同?它们在哪些情况下会被使用?
  • 【C++】模板与泛型编程(一):定义模板,控制实例化、效率与灵活性
  • Fabric.js中文教程
  • 唐帕科技校园语音报警系统:通过关键词识别,阻止校园霸凌事件
  • 网络基础 - 网段划分篇
  • 嵌入式硬件杂谈(一)-推挽 开漏 高阻态 上拉电阻
  • CHI 协议层 Retry —— CHI(8)
  • 安科瑞工业绝缘监测装置:保障煤矿井下6kV供电系统安全运行的关键应用——安科瑞 丁佳雯
  • Java使用Thumbnails进行图片处理
  • 《C++跨平台编译:打破系统边界,释放代码潜能》
  • pytest执行用例时从conftest.py抛出ModuleNotFoundError:No module named ‘XXX‘异常的解决办法
  • YOLOv8进阶实战:融合SAHI超推理算法,在无人机应用中精准捕捉视频与图片中的微小目标
  • 数据库运维实操优质文章文档分享(含Oracle、MySQL等) | 2024年10月刊
  • Avalonia UI 框架教程
  • Docker安装部署RabbitMQ(详细教程)
  • 【Java多线程】单例模式(饿汉模式和懒汉模式)
  • Docker 镜像和容器的导入导出及常用命令
  • 网络安全之SQL初步注入
  • Locally Linear Embedding (LLE)
  • 文件fd内容
  • 洛谷 P3043 [USACO12JAN] Bovine Alliance G
  • Python练习19