让别人做网站多久开始注册域名,公司注册地址提供,中国石油销售公司网站建设,网站弹出qq聊天窗口目录 1、283.移动零
2、1089.复写零
3、202.快乐数 1、283.移动零 题目#xff1a;
给定一个数组 nums#xff0c;编写一个函数将所有 0 移动到数组的末尾#xff0c;同时保持非零元素的相对顺序。
请注意 #xff0c;必须在不复制数组的情况下原地对数组进行操作。 …目录 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一个是kj就是当前0的位置k就是去向下去遍历剩余数组的指针如果找到不等于0的就和j进行交换再把k的位置给给j这样就能找出数组中的0了。
class Solution {
public:void moveZeroes(vectorint nums) {int sznums.size()-1;for(int i0;isz;i){if(nums[i]0){int ji;int ki1;while(ksz){if(nums[k]!0){swap(nums[j],nums[k]);jk;}k;}}}}
}; 然后还有另外一种方式就是利用两个指针类似于快慢指针的方式right指针一直走遇到非0就和left交换数据然后leift才这样只需要走一遍就可以把所有数据交换完成不用和上面一样每次都需要挪动消耗就会特别大。
class Solution {
public:void moveZeroes(vectorint nums) {int sznums.size();int left0;int right0;while(rightsz){if(nums[right]){swap(nums[left],nums[right]);left;}right;}}
}; 2、1089.复写零
1089. 复写零 - 力扣LeetCodehttps://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 1040 arr[i] 9
这题我第一开始的想法是遇到0然后进行挪动一下数据测试用例过了可是有几个没过超出时间限制了代码如下
class Solution {
public:void duplicateZeros(vectorint arr) {int narr.size()-1;for(int i0;in;i){if(arr[i]0){int jn;while(ji){arr[j]arr[j-1];coutjendl;--j;}ii1;arr[i]0;}}}
}; 然后我就开始从写想出下方的代码就是遇到0之后在这个位置插入一个0然后尾删一个也就是库函数里面的pop_back()函数 代码如下然后过了。
class Solution {
public:void duplicateZeros(vectorint arr) {int narr.size()-1;for(int i0;in;i){if(arr[i]0){arr.pop_back();arr.insert(arr.begin()i,0); i;}}}
}; 3、202.快乐数
202. 快乐数 - 力扣LeetCodehttps://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 sum0;while(n){int tn%10;sumt*t;n/10;}return sum;}bool isHappy(int n) {int slown,fastbitSum(n);while(slow!fast){slowbitSum(slow);fastbitSum(bitSum(fast));}return slow1;}
};