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

《双指针篇》---双指针算法原理

利用数组下标来充当指针。

1.双指针算法本质:

将数据划分为三个区间,我们以移动零为例:

给定数组中。

【0,left】:全是非0元素。

【left+1,cur-1】:全是0元素。

【cur,n-1】:待处理元素。

        public void moveZeroes(int[] nums) {//定义left和right双指针。并在right<n的情况下循环。//如果nums[right] != 0则交换left和right指向的元素。//若等于零则right++。//保证left之前的数据非零。left指向第一个零。//right之后的数据待处理。int left = 0,right = 0;int n = nums.length;while(right < n){if(nums[right] != 0){int temp = nums[left];nums[left] = nums[right];nums[right] = temp;left++;}right++;}}

2.拓展:快排(双指针算法是快排中最核心的一步)

快排里面最核心的一步就是数据划分这一步。

定义一个数组,我们设置一个基准元素tmp。将数组划分为两个部分。

左边全 <= tmp。 右边全 > tmp。

三个区间:

【0,left】:全是 ≤ tmp。

【left+1,cur-1】:全是 > tmp。

【cur,n-1】:待处理元素。

快排的双指针思想不适合处理很多数据都相同的情况。

后面有一道颜色划分的题目。

我们会把数组分成三块。用这个算法排序思想来解决快排是最好的解法。


http://www.mrgr.cn/news/63706.html

相关文章:

  • openCV基础-图像预处理Day26
  • 【LeetCode】每日一题 2024_11_1 超级饮料的最大强化能量(DP)
  • GBDT 算法的原理推导
  • docker-compose 什么情况下需要先down再up(ChatGPT回答)
  • 【Linux】用户权限管理:创建受限用户并配置特定目录访问权限
  • 线上3D看车有何优势?
  • SpringMvc day1101
  • L2.【LeetCode笔记】反转链表
  • vue3项目编码时相对合理的顺序推荐仅个人记录备用
  • elementplus组件库el-menu组件中的default-active属性使用
  • Mac “屏幕保护程序启动或显示器关闭后需要密码“无效
  • AIGC生成式人工智能——泼天的富贵(三)
  • 飞机布雷盖航程公式
  • python实战项目51:selenium结合requests获取某众点评评论
  • 价值为王,浅析基础大模型行业应用创新发展新路径
  • YOLO11改进 | Neck | 有效提升小目标检测效果,附完整代码结构图【论文必备】
  • C++之多态(上)
  • 推荐一款音乐制作软件:Ableton Live Suite
  • 不可能的任务:这款浏览器竟然可以同时满足速度与隐私
  • 深入解析 Transformers 框架(三):Qwen2.5 大模型的 AutoTokenizer 技术细节
  • HJ38 求小球落地5次后所经历的路程和第5次反弹的高度
  • ArcGIS影像调色(三原色)三原色调整
  • 基于SpringBoot和PostGIS的世界各国邻国可视化实践
  • buu easyRE
  • pandas计算相关性并画热力图
  • 文件描述符fd 和 缓冲区