day1·算法-双指针

在这里插入图片描述
今天是第一天,GUNDOM带你学算法,跟上我的节奏吗,一起闪击蓝桥杯!
在这里插入图片描述

正文展开,今天先上点小菜供大家想用,如有错误或者建议直接放评论区,我会一个一个仔细查看的哦。

双方指针问题一般是在数组中定义两个指针变量,通过对这两个指针变量进行操作来达到解决问题的目的。
用一道最显而易见的题目来解释。
移动0
在这里插入图片描述
 将所有的0都移动到数组的最后,我们可以遍历查找不是0的元素,然后将他们从下标位置为i=0位置依次放在数组中,因为可能有0元素的存在,所以在循环之后非零元素的值不会补齐数组中的所有元素,就像上边那个例子一样,我们要将nums.size()-i的部分置为0,这道题就算是结束了。
C++代码如下

void moveZeroes(vector<int>& nums) {//解法1int k=0;for(auto i:nums){if(i!=0){nums[k]=i;k++;}i++;}cout<<k<<endl;for(int j=k;j<nums.size();j++){nums[j]=0;}//写法二:int pre,tail;for(pre=0,tail=0;tail<nums.size();tail++){if(nums[tail]!=0){swap(nums[pre++],nums[tail]);}}}

复写零
在这里插入图片描述
 如果数组中有零元素,就将该0复写,后边的元素顺序不变,可以知道,如果有0元素,就一定会有元素越界被丢弃。
这道题目思路很容易想到,但是还是有一点坑点。
思路如下
 首先要找到最终复写的位置,然后从这个位置依次向前复写
在这里插入图片描述
在找到要求数组的最后一位后,根据值向前遍历。
 假设找到的位置为head,根据head位置的值来确定数组从后往前写什么,初始写入的位置一定是arr.size()-1。如果tail位置是0,就可以往前确定两个位置都是零,如果不是零,就在当前tail位置写入head位置的值,然后更新head和tail的数值。
代码如下

void duplicateZeros(vector<int>& arr) {int head = 0;int tail = 0;while (tail < arr.size()){if (arr[head] == 0){tail ++;}tail++;head++;}head--;cout << head << endl;tail = arr.size() - 1;while (tail>0){if (arr[head] == 0){arr[tail--] = 0;arr[tail--] = 0;}else{arr[tail--] = arr[head];}head--;}for (auto i : arr){cout << i;}
}

动图演示如下
在这里插入图片描述
但是写完后提交……
在这里插入图片描述
推演一遍我们就会发现,head落在了不对的地方,所以才会造成一连串错误。
在这里插入图片描述
 如果tail位置大于size,那就直接将数组末尾元素置0,将tail和head向前移动,重新锁定位置。

if (tail > arr.size()){arr[arr.size() - 1] = 0;tail =arr.size()-2;head=head-1;}else{tail = arr.size() - 1;}

顺利过关。
在这里插入图片描述
盛水最多的容器在这里插入图片描述
 以x轴为桶宽,以y轴为木桶高度,我们知道水桶效应,判断木桶能装多少水是取决于短板的。
 分析题目,如果用暴力求解的方法,依次算出不同变量下木桶能盛多少水,然后就可以知道最大的装水量。
使用双指针算法可以遍历更少的次数求解出答案。
在这里插入图片描述
 包含第一个轴的最大盛水量就求出来了,保存该值,以第二个轴和第一个轴为木桶边界(以下称head,tail)此时两轴中低的是7,移动前边的轴宽度会减小,且高度最大还是7,所以又求出一个最大值49。
 移动后边的轴即tail,以倒数第二个轴即3的高度继续以同样的形式继续求最大值,可以得到18,移动前边的轴,即head,继续判断。
可以看出这种方式只遍历一遍,就可以找到最大的面积。
代码如下

class Solution {
public:
int maxnum(int a,int b)
{return a>b?a:b;
}
int minnum(int a,int b)
{return a<b?a:b;
}int maxArea(vector<int>& height) {int left=0;int right=height.size()-1;int width=right;int mul=0;int ret=0;while(left!=right){int length=minnum(height[left],height[right]);ret=length*width;if(ret>mul){mul=ret;}if(height[left]<height[right]){left++;}else{right--;}width--;}return mul;}   
};

总结:
 双指针的题目只需要有清晰的思路,要清楚指针的位置,把握好结束条件,双指针的思路上边的题目玩的很简单,最后一道题要善于观察分析,就可以写出更加高效的方法。

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

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

相关文章

react 学习笔记

一、创建虚拟dom ReactDOM.render(虚拟dom&#xff0c;要渲染的节点) <body><div id"test"></div><!-- 引入react核心库 --><script src"../js/react.development.js"></script><!-- 引入react-dom&#xff0c;用…

基于elementUI封装的带复选框el-checkbox的下拉多选el-select组件

效果图&#xff1a; 组件&#xff1a;MultipleSelect.vue <template><el-select v-model"selectValues" v-bind"$attrs" v-on"listeners" multiple placeholder"请选择" style"width: 50%" change"changeSel…

接口测试快速上手指南

大量线上BUG表明&#xff0c;对接口进行测试可以有效提升产品质量&#xff0c;暴露手工测试时难以发现的问题&#xff0c;同时也能缩短测试周期&#xff0c;提升测试效率。但在实际执行过程中&#xff0c;接口测试被很多同学打上了“上手难&#xff0c;门槛高”的标签。 本文旨…

【书生·浦语大模型实战营04】《(4)XTuner 大模型单卡低成本微调实战》学习笔记

《(4)XTuner 大模型单卡低成本微调实战》 课程文档&#xff1a;《XTuner 大模型单卡低成本微调实战》 1 Finetune简介 LLM的下游应用中&#xff0c;增量预训练和指令跟随是经常会用到两种的微调模式 1.1 增量预训练微调 使用场景&#xff1a;让基座模型学习到一些新知识&a…

matplotlib教程(一)—— 入门基础

前言 Matplotlib 是 Python 的绘图库&#xff0c;它能让使用者很轻松地将数据图形化&#xff0c;并且提供多样化的输出格式&#xff1b;它可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等 在使用它之前&#xff0c;应导入&#xff1a;import matp…

【计算机组成原理】程序的转换及机器级表示 常用计算机术语英文缩写汇总

编码 二进制编码的十进制数&#xff08;BCD&#xff09;&#xff1a;Binary Coded Decimal美国信息交换标准代码&#xff08;ASCII&#xff09;&#xff1a;American Standard Code for Information Interchange 数据的排列顺序 最低有效位&#xff08;LSB&#xff09;&…

Docker安装Elesticsearch7详细步骤

​ 1、创建安装目录 mkdir -p /usr/local/docker/es-docker 2、配置虚拟内存 如果不配置&#xff0c;后面启动es会报错。 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 配置如下 vi /etc/sysctl.conf vm.max_map_coun…

基于Hadoop的网上购物行为大数据分析及预测系统【flask+echarts+机器学习】前后端交互

有需要本项目或者部署的系统可以私信博主&#xff0c;提供远程部署和讲解 本研究基于淘宝用户行为的开源数据展开大数据分析研究&#xff0c;通过Hadoop大数据分析平台对阿里天池公开的开源数据集进行多维度的用户行为分析&#xff0c;为电商销售提供可行性决策。 首先我们将大…

Paddle模型转ONNX

深度学习模型在硬件加速器上的部署常常要用到ONNX&#xff08;Open Neural Network Exchange&#xff0c;开放神经网络交换&#xff09;格式&#xff0c;也可以通过ONNX实现不同AI框架&#xff08;如Pytorch、TensorFlow、Caffe2、PaddlePaddle等&#xff09;之间的模型转换。 …

[渗透测试学习] Surveillance -HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描端口 nmap -sV -sC -v -p- --min-rate 1000 10.10.11.245扫出来两个端口,其中80端口有http服务并且重定向到surveillance.htb 那么我们添加下域名然后访问80端口,发现是企业网站尝试扫描子域名和目录无果后,用Wappalyzer插…

云防护概念及云防护作用

云防护是什么 云防护是一种网络安全技术&#xff0c;旨在保护云计算环境中的数据和系统免受恶意攻击和未授权访问。 云防护适用场景 一切http.https.tcp协议&#xff0c;如游戏、电商、金融、物联网等APP PC 网站。 云防护的主要作用 云防护的主要作用是通过搭规模庞大的云防…

NowinAndroid—2024 Android现代开发全功能应用

NowinAndroid—2024 Android现代开发全功能应用 现代Android开发全功能示例应用Now-in-Android&#xff0c;它是用Kotlin和Jetpack Compose开发的&#xff0c;功能非常强大。这个应用遵循了安卓设计和开发的最佳方法&#xff0c;旨在给开发者提供实用的参考资料。无论你是新手…