双指针算法(1)

目录

283.移动零

一、题目描述

二、思路解析

三、代码

1089.复写零

一、题目描述

二、思路解析

三、代码

202.快乐数

一、题目描述

二、思路解析

三、代码

11.盛水最多的容器

一、题目描述

二、思路解析

三、代码


283.移动零

一、题目描述

OJ题目链接:力扣(LeetCode)

二、思路解析

这是将数组分成两部分的题目,当我们遇到把数组分成若干部分的题目时,首先要想到的是双指针,在之前的学习中,我对对撞指针的题目做的比较多,但是这题如果我们使用对撞指针就无法满足“保持非零元素的相对顺序”这一条件,所以我们就考虑到了快慢指针。

我们想定义两个指针 cur 和 dest ,让 cur 遍历整个数组, dest 则指向已处理数组的最后一个元素,根据题目要求,我们可以画出如下原理图:
当我们的cur遍历完整个数组,最后一部分就没有数了,也就已经解决问题了。
但是我们要注意,因为 dest 指向已处理部分的最后一个元素,所以 dest 是非零的,交换时使用的是 dest++

三、代码

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

1089.复写零

一、题目描述

OJ题目链接:力扣(LeetCode)

二、思路解析

首先我考虑的还是快慢指针,从前向后遍历数组元素,可是我们要移动元素,就必然会产生元素的覆盖:
我还企图用三个指针来记录要被覆盖的值,可是当上手后会发现,这好像一个巨大的递归,当我记录了当前要被覆盖的值,我们的下一个值又被覆盖了:
看来从前向后是行不通的,那我们只能从后向前再继续尝试,但是又有一个难题,因为数组长度一直是不变的,所以我们要得知结果数组的最后一个数是谁:

这就又要用到快慢指针了,我们设置 cur 和 dest 两个指针,当 nums[cur] == 0 时, dest 走两格,其它时候, dest 和 cur 都走一格,当 dest 走完整个数组, cur 所指的就是最后数组的结尾元素:
现在知道了结果数组的最后一个元素,那么我们再让 cur 和 dest 往回走,

1.1.如果 cur 的值不是0,dest 的值直接被覆盖,
1.2.dest 和 cur 都向前走一步;

2.1.如果 cur 的值是0,那么 dest 的值被覆盖,

2.2.dest 向前走一步,dest 的值继续被覆盖,

2.3.dest 和 cur 都向前走一步。

三、代码

class Solution {
public:void duplicateZeros(vector<int>& arr) {int len = arr.size();int cur = 0;int dest = -1;//一开始不知道dest的位置while(cur < len)//cur要遍历整个数组{if(arr[cur]) dest++;else dest += 2;if(dest >= len - 1) break;//如果dest已经到数组结尾,终止cur++;}if(dest == len)//dest有可能越界{//单独处理末尾元素arr[len - 1] = 0;dest -= 2;cur--;}while(cur >= 0){if(arr[cur]) arr[dest--] = arr[cur--];else{arr[dest--] = 0;arr[dest--] = 0;cur--;}}}
};

202.快乐数

一、题目描述

OJ题目链接:力扣(LeetCode)

二、思路解析


我们要特别关注题目描述中的第二句话,这是一个始终都会循环的结构,对比之前的知识,我们很快能想到环形链表。
定义 fast 和 slow 两个指针, fast 的速度是 slow 的二倍,那么他们一定会在环内相遇,我们通过观察相遇位置是否是1就可以得出该数是不是快乐数。
接下来的任务就是算这个数每个位置上的数字的平方和了,这有多种写法,我提供我的写法,如下

三、代码

class Solution {
public:int Calculate(int n){//计算某个数每个位置上的数字的平方和int sum = 0;while(n / 10 >= 10){sum += pow(n % 10, 2);n /= 10;}sum += pow(n % 10, 2);sum += pow(n / 10, 2);return sum;} bool isHappy(int n){int fast = Calculate(n);int slow = n;while (fast != slow){slow = Calculate(slow);fast = Calculate(Calculate(fast));}return slow == 1;}
};

11.盛水最多的容器

一、题目描述

OJ题目链接:力扣(LeetCode)

二、思路解析

首先我们先要理解下面的话,如果不理解可以自己举例子算一下,所以就得出只有一种情况是不确定的,我们只需要罗列出该情况并找到最大值,即可完成本题。

根据以上情况,我们设置左右指针,并不断选中最小值然后计算其容积,并让非最小值向内移动,不断重复,并不断更新容积的最大值即可。

三、代码

class Solution {
public:int maxArea(vector<int>& height) {   int min_Val = 0;//最小值int V = 0;//容积int tmp = 0;int left = 0;int right = height.size() - 1;while(left < right){min_Val = min(height[left], height[right]);tmp = (right - left) * min_Val;if(height[left] > height[right])right--;elseleft++;V = max(V, tmp);}return V;}
};

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

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

相关文章

python基于django的药品进销存管理系统elsb2

本系统是通过面向对象的python语言搭建系统框架&#xff0c;通过关系型数据库MySQL存储数据。使用django框架进行药店药品的信息管理&#xff0c;用户只需要通过浏览器访问系统即可获取药店药品信息&#xff0c;并可以在线管理&#xff0c;实现了信息的科学管理与查询统计。本文…

OpenAI 大声朗读出来

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【MySQL】not in遇上null的坑

今天遇到一个问题&#xff1a; 1、当 in 内的字段包含 null 的时候&#xff0c;正常过滤&#xff1b; 2、当 not in 内的字段包含 null 的时候&#xff0c;不能正常过滤&#xff0c;即使满足条件&#xff0c;最终结果也为 空。 测试如下&#xff1a; select * from emp e;当…

2024全国水科技大会之国际合作与新技术、新产品推介会

召集人&#xff1a;中华环保联合会水环境治理专委会 此论坛主要为筛选新技术、新产品&#xff0c;入选企业后续可参与到我会7月的国际考察中&#xff0c;可为企业推荐国际项目合作&#xff01; 一、会议背景 为积极应对“十四五”期间我国生态环境治理面临的挑战&#xff0c;加…

【nodejs】“__dirname is not defined”错误修复

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ 原理CommonJS vs ESM错误原因 2️⃣ 禁用 ESM 模式并改用 CommonJS方案一&#xff1a;项目方案二&#xff1a;单文件 3️⃣ 在 ESM 模式下自实现__dirname&#x1f4d6; 参考资料 &#x1f6eb; 问题 描述 从网上找了一份代码&am…

x86 Ubuntu上编译eudev给龙芯loongarch64架构主机使用

1、下载eudev库eudev-master.zip&#xff0c;链接&#xff1a;eudev库官方地址 2、下载龙芯的交叉编译工具&#xff1a;loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.2.tar.xz&#xff0c;链接&#xff1a;龙芯交叉编译官方地址 3、交叉编译器环境搭建 (1)、…

InfluxDB SHOW SERIES语句按照什么顺序返回?

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言样例SHOW SERIES比较原理结论结束语 引言 influxdb的计算引擎为了做到自底而上的…

嵌入式 Linux 开发的基本概念 及 学习路线

原文链接&#xff1a;https://www.cnblogs.com/DSCC2020/p/13787321.html 1.嵌入式 Linux 开发的基本概念 1.1嵌入式 Linux 的组成 嵌入式 Linux 系统&#xff0c;就相当于一套完整的 PC 软件系统&#xff0c;如下图所示&#xff1a; 1.2嵌入式 Linux 的日常开发流程 Bootloa…

IDEA稀奇古怪问题的解决方案

idea在电脑死机重启后&#xff0c;启动项目报错 尝试了各种办法&#xff0c;重新导入项目&#xff0c;删除.idea文件重新导入&#xff0c;把本地代码删除重新pull下来再次导入&#xff0c;均无法解决。而且代码在eclipse中可以正常启动&#xff0c;遂排除代码和网络环境原因。…

探索c++——了解c++的魅力

前言&#xff1a;c是一门既面向对象又面向过程的语言。 不同于java纯粹的面向对象和c纯粹的面向过程。 造成c该特性的原因是c是由本贾尼大佬在c的基础上增添语法创建出来的一门新的语言。 它既兼容了c&#xff0c; 身具面向过程的特性。 又有本身的面向对象的特性。 面向对象和…

软考高级:UML 图 结构图、行为图和交互图 概念和题目

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

Vue3+Vue Router使用<transition>过渡动画实现左右分栏后台布局

摘要 利用Vue3及其配套的Vue Router实现后台管理系统中的页面过渡动画。文章首先简要介绍了Vue3的特性和Vue Router的基本用法&#xff0c;利用Vue3提供的组件以及Vue Router的路由钩子函数来实现页面过渡效果。 代码结构 在 components 里有4个组件&#xff0c;其中 Layout…

笔记本上使用usb蓝牙适配器

注意 必须先禁用笔记本上原来的蓝牙功能 禁用笔记本原来的蓝牙功能 使用usb蓝牙适配器

LVS集群---二

1.LVS工作模式和相关命令 1.1LVS集群工作模式 - lvs-nat&#xff1a;修改请求报文的目标IP,多目标IP的DNAT- lvs-dr&#xff1a;操纵封装新的MAC地址&#xff08;直接路由&#xff09;- lvs-tun&#xff1a;隧道模式 1.1.1 LVS的NAT模式 lvs-nat&#xff1a;本质是多目标IP的…

openssl3.2 - exp - 产生随机数

文章目录 openssl3.2 - exp - 产生随机数概述笔记END openssl3.2 - exp - 产生随机数 概述 要用到openssl产生的随机数, 查了资料. 如果用命令行产生随机数, 如下: openssl rand -hex -num 6 48bfd3a64f54单步跟进去, 看到主要就是调用了一个RAND_bytes(), 没其他了. 官方说…

人工智能在信息系统安全中的运用

一、 概述 对于企业和消费者来讲&#xff0c;人工智能是非常有用的工具&#xff0c;那又该如何使用人工智能技术来保护敏感信息?通过快速处理数据并预测分析&#xff0c;AI可以完成从自动化系统到保护信息的所有工作。尽管有些黑客利用技术手段来达到自己的目的&#xff0c;但…

华为数通方向HCIP-DataCom H12-821题库(多选题:101-120)

第101题 下面关于Network-Summary-LSA描述正确的是 A、Network-Summary-LSA中的Metric被设置成从该ABR到达目的网段的开销值 B、Network-Summary-LSA中 的Netmask被设置成目的网段的网络掩码 C、Network-Summary-LSA中的Link State ID被设置成目的网络的IP地址 D、Network-Sum…

【AI视野·今日Robot 机器人论文速览 第八十三期】Wed, 6 Mar 2024

AI视野今日CS.Robotics 机器人学论文速览 Wed, 6 Mar 2024 Totally 30 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;SpaceHopper,外星探索多功能三足机器人 (from Robotic Systems Lab, ETH Zurich) Daily Robotics Papers A Safety-Criti…

JavaSE——基础小项目-模拟ATM系统(项目主要目标、技术选型、架构搭建、具体实现、完整代码注释)

目录 项目主要目标 技术选型 面向对象编程 使用集合容器 程序流程控制 使用常见API 系统架构搭建与欢迎页设计 Account ATM Test 用户开户功能实现 录入账户名称与性别 录入账户密码与取现额度 生成新卡号 存入账户 登录功能实现 登录后操作实现 退出账户 存…

每日学习总结20240306

每日总结 20240306 1. 断言测试判断 #include <iostream> #include <assert.h> #include <cassert> #include <stdio.h>#define STR_OK "[\x1b[1;32m OK \x1b[0m]" #define STR_FAIL "[\x1b[1;31mFAIL\x1b[0m]"…