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

【算法】day2 双指针+滑动窗口

1、三数之和(单调性,相撞)

题目:15. 三数之和 - 力扣(LeetCode)

思路:注意,组合不能重复。

代码:

class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> ret = new ArrayList<>();// 排序Arrays.sort(nums);int len = nums.length;// 双指针for(int i = 0; i <= len-3 && nums[i] <= 0;) {int left = i+1;int right = len-1;while(left < right) {int sum = nums[i] + nums[left] + nums[right];if(sum > 0) {right--;// 去重while(left < right && nums[right] == nums[right +1]) right--;} else if(sum < 0) {left++;// 去重while(left < right && nums[left] == nums[left-1]) left++;} else {ret.add(Arrays.asList(nums[i], nums[left], nums[right]));left++;right--;// 去重while(left < right && nums[left] == nums[left-1]) left++;while(left < right && nums[right] == nums[right +1]) right--;}}i++;// 去重while(i <= len-3 && nums[i] == nums[i-1]) i++;}return ret;}
}

时间:n^2

2、四数之和(单调性,相撞)

题目:18. 四数之和 - 力扣(LeetCode)

思路:与三数之和相似。

代码:这道题算四数 sum 有可能超过 int 的最大值 2147483647,把 sum 的类型改为 long,把第一个计算数强转为 long,后面的数字运算会自动类型提升为 long。

class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {Arrays.sort(nums);List<List<Integer>> ret = new ArrayList<>();int len = nums.length;for(int i = 0; i <= len - 4;) {for(int j = i+1; j <= len-3;) {int left = j+1;int right = len-1;while(left < right) {long sum = (long)nums[i] + nums[j] + nums[left] + nums[right];if(sum > target) {right--;while(left < right && nums[right] == nums[right+1]) right--;} else if(sum < target) {left++;while(left < right && nums[left] == nums[left-1]) left++;} else {System.out.println(sum);ret.add(Arrays.asList(nums[i], nums[j], nums[left], nums[right]));left++;right--;while(left < right && nums[left] == nums[left-1]) left++;while(left < right && nums[right] == nums[right+1]) right--;}}j++;while(j <= len-3 && nums[j] == nums[j-1]) j++;}i++;while(i <= len-4 && nums[i] == nums[i-1]) i++;}return ret;}
}

3、长度最小的子数组(滑动窗口)

(1)什么是滑动窗口

        即同向双指针。left 和 right 之间的区间,像一个窗口,往一个方向滑动。

(2)什么时候用滑动窗口

        暴力枚举时,可以发现单调性,让左右指针同向滑动。

(3)怎么用滑动窗口

        1、初始化:left=right=0

        2、进窗口:left 滑动

        3、出窗口:right 滑动

        4、更新结果,具体放在哪个位置,根据具体情况而定。

(4)解题

题目:209. 长度最小的子数组 - 力扣(LeetCode)

思路:

代码:

class Solution {public int minSubArrayLen(int target, int[] nums) {int n = nums.length;int sum = 0;int min_len = Integer.MAX_VALUE;for(int left=0, right=0; right < n; right++) {// 入窗口sum += nums[right];while(sum >= target) {// 更新结果min_len = Math.min(min_len, right-left+1);// 出窗口sum -= nums[left++];}}return min_len == Integer.MAX_VALUE ? 0 : min_len;}
}

文章转载自:

http://jTVh9vRG.chzqy.cn
http://nI6w7Vhj.chzqy.cn
http://QySKTHtm.chzqy.cn
http://qrGpz4kO.chzqy.cn
http://LFMOOW1f.chzqy.cn
http://r8qOa9HW.chzqy.cn
http://osNzVRPT.chzqy.cn
http://IaFVO7tL.chzqy.cn
http://Bacu5xba.chzqy.cn
http://SvYe07er.chzqy.cn
http://9wdUBBsU.chzqy.cn
http://NQ1N5FlD.chzqy.cn
http://A207IRtR.chzqy.cn
http://kgS9OIk3.chzqy.cn
http://f90qDeN6.chzqy.cn
http://mrTZnJZ2.chzqy.cn
http://pbqVwbBG.chzqy.cn
http://rFohg8aV.chzqy.cn
http://i6MIuXgK.chzqy.cn
http://mBAxyerq.chzqy.cn
http://SXFBfLAT.chzqy.cn
http://EzeqeQQD.chzqy.cn
http://yS9Tp2Eb.chzqy.cn
http://p6tNarTB.chzqy.cn
http://WGejKVIL.chzqy.cn
http://sPtp93UH.chzqy.cn
http://9Z8g4OrU.chzqy.cn
http://l6Ry0Czc.chzqy.cn
http://qQxm836d.chzqy.cn
http://7BCKxii7.chzqy.cn
http://www.dtcms.com/a/383168.html

相关文章:

  • 拆解 AI 大模型 “思考” 逻辑:从数据训练到推理输出的完整链路
  • Axios在鸿蒙应用开发中的使用
  • Go高性能双端队列Deque实战指南
  • StringBuilder 深度解析:数据结构与扩容机制的底层细节
  • Altium Designer(AD24)自学资源介绍
  • cs144 lab0学习总结
  • Playwright MCP浏览器自动化指南
  • 经典俄罗斯方块游戏 | 安卓三模式畅玩,暂时无广告!
  • JVM调优常用命令
  • 文心快码Comate - 百度推出的AI编码助手
  • 做一个RBAC权限
  • Debian13下使用 Vim + Vimspector + ST-LINK v2.1 调试 STM32F103 指南
  • 临床研究三千问——临床研究体系的4个核心(9)
  • 高光谱成像在回收塑料、纺织、建筑废料的应用
  • LeetCode 2348.全0子数组的数目
  • OCSP CDN HTTPS OTA
  • 1.2.3、从“本事务读”和“阻塞别的事务”角度看 Mysql 的事务和锁
  • MySQL C API 的 mysql_init 函数深度解析
  • 第10课:实时通信与事件处理
  • 33.网络基础概念(三)
  • Spark专题-第一部分:Spark 核心概述(1)-Spark 是什么?
  • 使用buildroot创建自己的linux镜像
  • MapReduce核心知识点总结:分布式计算的基石
  • 当大模型走向“赛场”:一场跨越教育、医疗与星辰的AI创新马拉松
  • 2025年IEEE TCE SCI2区,不确定环境下多无人机协同任务的时空优化动态路径规划,深度解析+性能实测
  • Python 上下文管理器:优雅解决资源管理难题
  • 主流反爬虫、反作弊防护与风控对抗手段
  • C语言柔性数组详解与应用
  • 【C++】22. 封装哈希表实现unordered_set和unordered_map
  • ARM Cortex-M 中的 I-CODE 总线、D-CODE 总线和系统总线