算法综合篇专题一:双指针问题

"就算没有看清那株灿烂的花蕊,也应该放声歌颂赞美鲜红的玫瑰" 


1、移动零

(1) 题目解析        

(2) 算法原理      

class Solution {
public:void moveZeroes(vector<int>& nums) {for(int cur=0,dest=-1;cur<nums.size();++cur){if(nums[cur]) swap(nums[cur],nums[++dest]);}}
};

2、复写零

(1) 题目解析        

(2) 算法原理                 

class Solution {
public:void duplicateZeros(vector<int>& arr) {// 1.找到最后一个下标位置int cur = 0;int dest = -1;int n = arr.size();while(dest < n){if(arr[cur]) dest++;else dest += 2;// dest走到边界if(dest >= n-1) break;cur++;}// 处理边界存在最后一个数为0if(dest == n){arr[n-1] = 0;cur--,dest-=2;}while(cur >= 0){if(arr[cur])  arr[dest--] = arr[cur--];else{arr[dest--] = 0;arr[dest--] = 0;cur--;}}}
};


3、快乐数 

(1) 题目解析

(2) 算法原理        

class Solution {
public:int bitSum(int n){int sum = 0;while(n){int a = n % 10;sum += pow(a,2);n /= 10;}return sum;}bool isHappy(int n) {// 快慢指针int slow = n,fast = bitSum(n);while(slow != fast){slow = bitSum(slow);fast = bitSum(bitSum(fast));}return slow == 1 ? true : false;}
};

4、盛最多水的容器 

(1) 题目解析        

(2) 算法原理        

class Solution {
public:int maxArea(vector<int>& arr) {int n = arr.size();int left=0,right=n-1;int ret = 0;while(left < right){int height = min(arr[right],arr[left]);int v = (right-left) * height;ret = max(ret,v);height == arr[right] ? right--:left++;} return ret;}
};


5、有效三角)——形个数

(1) 题目解析        

(2) 算法原理        

class Solution {
public:int triangleNumber(vector<int>& nums) {int n = nums.size();sort(nums.begin(),nums.end());int num = 0;for(int c=nums.size()-1;c>=2;--c){int left = 0;int right = c-1;while(left < right){int sum = nums[left] + nums[right];if(sum > nums[c]){num += (right-left);right--;}else left++;}}return num;}
};

6、和为s的两个数

(1) 题目解析

(2) 算法原理

        

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int n = nums.size();int left = 0,right=n-1;while(left < right){int sum = nums[left]+ nums[right];if(sum > target){right--;}else if(sum < target){left++;}else return {nums[left],nums[right]};}return {-1};}
};

   


7、三数之和

(1) 题目解析        

(2) 算法原理

        

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int n = nums.size();vector<vector<int>> res;sort(nums.begin(),nums.end());for(int i=0;i<n;){if(nums[i] > 0) break;int left = i+1,right = n-1;while(left < right){int tar = -nums[i];int sum = nums[left] + nums[right];if(sum > tar) right--;else if(sum < tar) left++;else{res.push_back({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 < n && nums[i] == nums[i-1]) i++;}return res;}
};


8、四数之和

(1) 题目解析

        这道题的本质和三数之和没什么区别,只不过比三数字和多套一层循环就能够解决了。所以不再细讲,注意到各个循环内的越界去重问题就行。

(2) 算法原理     

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {int n = nums.size();// 排序sort(nums.begin(),nums.end());vector<vector<int>> res;for(int i=0;i<n;){for(int j=i+1;j<n;){int left =j+1,right=n-1;while(left < right){// 固定两个数// 可能出现溢出情况long long tar = (long long)target - nums[i] - nums[j];int sum = nums[left] + nums[right];if(sum > tar) right--;else if(sum < tar) left++;else {res.push_back({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 < n && nums[j] == nums[j-1]) j++;}i++;while(i < n && nums[i] == nums[i-1]) i++;}return res;}
};


本篇到此结束,感谢你的阅读。

祝你好运,向阳而生~


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/17630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AcWing 4908.饥饿的牛

原题链接&#xff1a;AcWing 4908.饥饿的牛 题目来源&#xff1a;夏季每日一题2023 贝茜是一头饥饿的牛。 每天晚上&#xff0c;如果牛棚中还有干草的话&#xff0c;贝茜都会吃掉其中的一捆。 初始时&#xff0c;牛棚中没有干草。 为了让贝茜不被饿死&#xff0c;农夫约翰制…

AOJ 2200 Mr. Rito Post Office 最短路径+动态规划+谨慎+思维

我写了好多注释&#xff0c;一看就能看懂&#xff0c;这个题目我想了6&#xff0c;7个小时&#xff0c;一开始忽略了船的位置和要把船安置的位置一致的情况&#xff0c;补上就对了。 #include <iostream> using namespace std; int inf 0x3f3f3f3f, num[1007], dp[1007…

Ansible-roles

Ansible-roles 一、roles作用 把playbook剧本里的各个play看作为角色&#xff0c;将各个角色的tasks任务、vars变量、templates模板、files文件等内容放置到角色的目录中统一管理&#xff0c;需要的时候可在playbook中直接使用roles调用&#xff0c;所以roles可以实现playboo…

实验报告6-利用Modelsim搭建一个UVM验证平台并跑通程序显示波形

实验报告6-利用Modelsim搭建一个UVM验证平台并跑通程序显示波形 1,背景知识2,搭建一个UVM验证平台3,确定几个重要组件的代码,全部都是.sv文件。(1)确定了行为,写interface文件:pkt_if.sv,代码如下:(2)pkt_data.sv(3)pkt_drv.sv(4)pkt_gen.sv(5)environment.s…

【微信小程序】引入第三方库poke对GZIP压缩数据进行解压

使用 npm 包管理工具&#xff1a; 首先&#xff0c;在小程序的根目录下执行 npm init 初始化项目&#xff0c;生成 package.json 文件。然后&#xff0c;通过 npm 安装 pako&#xff1a;npm install pako。接下来&#xff0c;在小程序的根目录下创建一个名为 miniprogram_npm 的…

java设计模式-建造者(Builder)设计模式

介绍 Java的建造者&#xff08;Builder&#xff09;设计模式可以将产品的内部表现和产品的构建过程分离开来&#xff0c;这样使用同一个构建过程来构建不同内部表现的产品。 建造者设计模式涉及如下角色&#xff1a; 产品&#xff08;Product&#xff09;角色&#xff1a;被…

前端工程化最佳实践:项目结构、代码规范和文档管理

文章目录 前端工程化最佳实践项目结构设计与组织文档管理和注释规范国际化和本地化实践 前端工程化的未来发展趋势前端工程化领域的最新技术和工具WebAssembly 和前端性能优化可持续性和可访问性的趋势 总结前端工程化的关键知识点前端工程化对项目和团队的价值 前端工程化最佳…

《golang设计模式》第一部分·创建型模式-01-单例模式(Singleton)

文章目录 1. 概述1.1 目的1.2 实现方式 2. 代码示例2.1 设计2.2 代码 1. 概述 1.1 目的 保证类只有一个实例有方法能让外部访问到该实例 1.2 实现方式 懒汉式 在第一次调用单例对象时创建该对象&#xff0c;这样可以避免不必要的资源浪费 饿汉式 在程序启动时就创建单例对象…

卷积神经网络

目录 注意&#xff1a;有参数计算的才叫层 1.应用 1.1分类和检索 1.2超分辨率重构 1.3医学任务 1.4无人驾驶 1.5人脸识别 2.卷积 2.1卷积神经网络和传统网络的区别 2.2整体框架 2.3理解卷积&#xff08;重点&#xff09; 2.4为何要进行多层卷积 2.5卷积核的参数 2.6…

C++STL库中的list

文章目录 list的介绍及使用 list的常用接口 list的模拟实现 list与vector的对比 一、list的介绍及使用 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list的底层是双向带头循环链表结构&#xff0c;双向带头循…

HDFS 分布式存储 spark storm HBase

HDFS 分布式存储 spark storm HBase 分布式结构 master slave name node client 负责文件的拆分 128MB 3份 data node MapReduce 分布式计算 离线计算 2.X之前 速度比较慢 对比spark 编程思想 Map 分 Reduce 合 hadoop streaming Mrjob Yarn 资源管理 cpu 内存 MapReduc…

NoSQL———Redis配置与优化

目录 一、关系数据库与非关系型数据库 1.1 关系型数据库 1.2 非关系型数据库 1.3 关系型数据库和非关系型数据库区别 1.3.1 非关系型数据库产生背景 二、Redis简介 2.1 redis优点&#xff1a; 三、Redis 安装部署 四、Redis 命令工具 4.1 redis-cli 命令行工具 …

vue3代码编辑器组件codemirror-editor-vue3

官方文档&#xff1a;https://github.com/RennCheung/codemirror-editor-vue3 国内镜像&#xff1a;https://renncheung.github.io/codemirror-editor-vue3/zh-CN/guide/getting-started 1.安装 npm install codemirror-editor-vue3 codemirror5.x -S2.代码示例 <templat…

mybatis框架遇到的问题:All elements are null

今天在做一个查询接口&#xff0c;应用场景是统计选择日期范围内的每日数据量&#xff0c;于是便想到了使用count&#xff08;&#xff09;函数来统计总行数来代表数据量&#xff0c;并且以记录时间的字段来作为分组标准&#xff08;group by&#xff09;&#xff0c;大体思路有…

基于ssm+mysql+jsp高校疫情防控出入信息管理系统

基于ssmmysqljsp高校疫情防控出入信息管理系统 一、系统介绍二、功能展示1.登陆2.教师管理3.学生管理4.打卡记录管理5.学生申请通行证6.通行证管理7.留言信息管理8.公告类型管理9.公告管理 四、获取源码 一、系统介绍 学生 : 个人中心、打卡记录管理、学生申请通行证、通行证管…

Delphi XE的原生JSONObject如何判断键值是否存在?

【问题现象】 Delphi XE的原生JSONObject&#xff0c;取出键值的时候如下&#xff1a; //json是传入的参数&#xff0c;里面包括"food_name"等之类的键值&#xff0c;没有food_type键值 procedure XXXXFunciton(json:TJSONObject) var strFoodName,strFoodType:S…

<C++> STL_string

目录 1.string类 2.string类的接口 2.1 成员函数 2.1.1 string构造函数 2.1.2 string赋值运算 2.1.3 string析构函数 2.2 string对象访问以及迭代器 2.2.1 string的遍历方式 2.2.2 迭代器的使用 2.2.3 const_迭代器的使用 2.2.4 at 2.2.5 back和front 2.3 string容…

Docker基础命令(一)

Docker使用1 一、运行终端 打开终端&#xff0c;输入docker images &#xff0c;如果运行正常&#xff0c;表示docker已经可以在本电脑上使用了 二、docker常用命令 指令说明docker images查看已下载的镜像docker rmi 镜像名称:标签名删除已下载的镜像docker search 镜像从官…

ffmpeg 的帮助系统

----------------------------------------------- author: hjjdebug date: 2023年 07月 31日 星期一 14:32:15 CST ffmpeg 的帮助系统 目的: 搞清楚它都打印了什么? 它是怎样实现的. ----------------------------------------------- $ffprobe -h 1996行输出 $ffmpeg -h…

Java如何实现将类文件打包为jar包

目录 将类文件打包为jar包 1.写类文件2.编译3.测试4.打jar包jar包应该怎么打&#xff1f; 1.首先确保你的项目2.选中你的项目,点右键3.选择runnable jar file4.如下图,直接看图5.然后点finish 将类文件打包为jar包 为实际项目写了一个工具类&#xff0c;但是每次使用时都需要…