OJ刷题日记:1、双指针(1)

目录

1、283.移动零

2、1089.复写零

3、202.快乐数  


1、283.移动零

题目:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

下方代码就是这题的解法,我是利用for循环去遍历找出0的值,如果找到0了,这时就停在这里,然后进行判断,利用两个指针进行判断,一个是j一个是k,j就是当前0的位置,k就是去向下去遍历剩余数组的指针,如果找到不等于0的就和j进行交换,再把k的位置给给j,这样就能找出数组中的0了。

class Solution {
public:void moveZeroes(vector<int>& nums) {int sz=nums.size()-1;for(int i=0;i<sz;i++){if(nums[i]==0){int j=i;int k=i+1;while(k<=sz){if(nums[k]!=0){swap(nums[j],nums[k]);j=k;}++k;}}}}
};

然后还有另外一种方式就是利用两个指针,类似于快慢指针的方式,right指针一直走,遇到非0就和left交换数据,然后leift才++,这样只需要走一遍就可以把所有数据交换完成,不用和上面一样每次都需要挪动,消耗就会特别大。

class Solution {
public:void moveZeroes(vector<int>& nums) {int sz=nums.size();int left=0;int right=0;while(right<sz){if(nums[right]){swap(nums[left],nums[right]);left++;}right++;}}
};

 

2、1089.复写零

1089. 复写零 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/duplicate-zeros/description/

题目:

给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。

注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。

示例 1:

输入:arr = [1,0,2,3,0,4,5,0]
输出:[1,0,0,2,3,0,0,4]
解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]

示例 2:

输入:arr = [1,2,3]
输出:[1,2,3]
解释:调用函数后,输入的数组将被修改为:[1,2,3]

提示:

  • 1 <= arr.length <= 104
  • 0 <= arr[i] <= 9

这题我第一开始的想法是遇到0然后进行挪动一下数据,测试用例过了,可是有几个没过,超出时间限制了,代码如下

class Solution {
public:void duplicateZeros(vector<int>& arr) {int n=arr.size()-1;for(int i=0;i<n;i++){if(arr[i]==0){int j=n;while(j>i){arr[j]=arr[j-1];cout<<j<<endl;--j;}i=i+1;arr[i]=0;}}}
};

然后我就开始从写,想出下方的代码,就是遇到0之后在这个位置插入一个0,然后尾删一个,也就是库函数里面的pop_back()函数 ,代码如下,然后过了。

class Solution {
public:void duplicateZeros(vector<int>& arr) {int n=arr.size()-1;for(int i=0;i<n;i++){if(arr[i]==0){arr.pop_back();arr.insert(arr.begin()+i,0); ++i;}}}
};

 

3、202.快乐数  

202. 快乐数 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/happy-number/description/

题目:

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

示例 2:

输入:n = 2
输出:false

提示:

  • 1 <= n <= 231 - 1

下面我说一下我这题的思路,首先题目说了可能是无限循环,也就是说这就是个环,因为1也是无限循环,所以这里就用了类似于约瑟夫环这里的判断方式快慢指针,一个走一步,一个走两步,直到两个指针相等,这时退出循环,判断这个数是否等于1就能解决这个问题了,代码和测试结果如下。

class Solution {
public:int bitSum(int n){int sum=0;while(n){int t=n%10;sum+=t*t;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;}
};

 

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

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

相关文章

mysql重启失败

服务器重启了一下&#xff0c;然后启动后发现mysql自动启动没有生效&#xff0c;于是手动通过systemctl启动mysqld&#xff0c;然后就报错:Starting MySQL...........The server quit without updating P[FAILED](/data/mysql/iz2zebvmy1qv3fao9c5riuz.pid). 根据配置my.cnf文…

Mysql内存表及使用场景(12/16)

内存表&#xff08;Memory引擎&#xff09; InnoDB引擎使用B树作为主键索引&#xff0c;数据按照索引顺序存储&#xff0c;称为索引组织表&#xff08;Index Organized Table&#xff09;。 Memory引擎的数据和索引分开存储&#xff0c;数据以数组形式存放&#xff0c;主键索…

Jmeter-跨线程传参(正则提取多个参数、jsonpath提取器)

目的&#xff1a; 当前接口请求的参数依赖于其他请求&#xff0c;且两个请求不是在同一个线程组时就会用到该方法进行跨线程组传参。 实际使用场景&#xff1a; 多个线程组的请求都依赖登录接口&#xff0c;但是登录接口仅执行一次。 实现方法&#xff1a; 以下举例的有正…

信息系统项目管理师——第22章组织通用治理

本章在第三版战略管理的基础上新增了2节内容&#xff0c;从2023年上半年的考情来看来 选择题&#xff0c;考1分左右&#xff0c;知识点比较分散&#xff0c;刷下题&#xff0c;考前突击下即可。 案例题&#xff0c;不考。 论文题&#xff0c;不考。 1组织战略 组织战略体现了…

电力综合自动化系统对电力储能技术的影响有哪些?

电力综合自动化系统对电力储能技术的影响主要体现在以下几个方面&#xff1a; 提高能源利用效率&#xff1a;电力综合自动化系统通过优化调度和能量管理&#xff0c;可以实现储能设备的有效利用&#xff0c;提高能源利用效率。在电力系统中&#xff0c;储能设备可以有效地平抑风…

Web App 入门指南:构建预测模型 App 的利器(shiny)

Web App 入门指南&#xff1a;构建预测模型 App 的利器 简介 近年来&#xff0c;随着机器学习和人工智能技术的快速发展&#xff0c;预测模型在各行各业得到了广泛应用。为了方便地部署和使用预测模型&#xff0c;将模型构建成 Web App 是一种非常好的选择。Web App 无需下载…

StylizedGS: Controllable Stylization for 3D Gaussian Splatting

StylizedGS: Controllable Stylization for 3D Gaussian Splatting StylizedGS&#xff1a;3D高斯溅射的可控样式化 Dingxi Zhang, Zhuoxun Chen, Yu-Jie Yuan, Fang-Lue Zhang, Zhenliang He, Shiguang Shan, and Lin Gao1 张定西&#xff0c;陈卓勋&#xff0c;袁玉洁&#x…

大日志精选案例七:徐州公交集团数字化转型中的日志审计优化实践

**> “城市公共交通作为民生重要基础设施&#xff0c;其安全与效率至关重要。聚铭的大日志方案&#xff0c;如同为公交系统装上了‘智慧眼’&#xff0c;提供了全方位的日志可见性&#xff0c;使我们能够全面、深入地了解公交系统的运行状况。日志中详细记录的各项操作、事件…

服务器感染了.rmallox勒索病毒,如何确保数据文件完整恢复?

引言&#xff1a; 随着网络技术的发展&#xff0c;勒索病毒已经成为当今数字时代的一大威胁。近期出现的.rmallox勒索病毒更是引发了广泛关注。本文将深入探讨.rmallox勒索病毒的特点&#xff0c;并提供一系列应对这一威胁的高效策略。如果受感染的数据确实有恢复的价值与必要…

libVLC 视频界面分割

先看看分割后的界面吧&#xff0c;根据分割的数量&#xff0c;来分割视频画面。 其实视频界面分割很简单&#xff0c;看过叠加窗口的这篇文章&#xff0c;不难理解&#xff0c;如何分割。 libVLC 视频窗口上叠加透明窗口-CSDN博客 如果还是不懂的话&#xff0c;我讲解一下原理…

什么是智能组网?

智能组网已经成为现代社会中网络通信的重要技术。智能组网通过建立高效的网络连接&#xff0c;实现设备之间的信息传输和远程通信。它在不同地区的电脑与电脑、设备与设备、电脑与设备之间搭建了桥梁&#xff0c;极大地提升了信息传递的效率和便捷性。 天联是一种智能组网技术&…

一起学习python——基础篇(15)

今天讲一下python的网络请求方法。 如果使用python语言做接口测试&#xff0c;可以安装Requests模块。 安装步骤&#xff1a;打开编程软件&#xff0c;然后点击settings——>Project:System——>Python Interpreter——>加号——>搜索栏里面输入“Requests”——&…