做网站需要的资质,怎么增加网站流量,新建网站的外链多久生效,吸引企业做网站283.移动零 283. 移动零https://leetcode.cn/problems/move-zeroes/
题目#xff1a;
给定一个数组 nums#xff0c;编写一个函数将所有 0 移动到数组的末尾#xff0c;同时保持非零元素的相对顺序。
请注意 #xff0c;必须在不复制数组的情况下原地对数组进行操作。 … 283.移动零 283. 移动零https://leetcode.cn/problems/move-zeroes/
题目
给定一个数组 nums编写一个函数将所有 0 移动到数组的末尾同时保持非零元素的相对顺序。
请注意 必须在不复制数组的情况下原地对数组进行操作。 解题思路 我们可以利用两个指针dest和cur的方法将这个数组分为三个区域 我们可以将dest初始化为-1cur初始化为0 cur走一遍数组遇到的两种情况 cur位置为0cur位置为非0 当cur位置为0cur 当cur不为0时swap交换一下就好dest 解题代码
class Solution {
public:void moveZeroes(vectorint nums) {int dest-1;int cur0;int sizenums.size();while(cursize){if(nums[cur]!0){swap(nums[dest1],nums[cur]);dest;}cur;}}
};
1089. 复写零 1089. 复写零https://leetcode.cn/problems/duplicate-zeros/ 题目
给你一个长度固定的整数数组 arr 请你将该数组中出现的每个零都复写一遍并将其余的元素向右平移。
注意请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改不要从函数返回任何东西。 解题思路 本题要求我们要就地修改不能使用额外的数组我们先用额外的数组想一想 我们发现结果是这样的 我们再将使用额外数组的双指针方法用在本地去实验一下我们发现dest-1和cur0去正向解决问题不可以会有元素被覆盖丢失的问题 我们试着反向去操作呢destsize-1指向最后一个元素那我们如何确定cur的位置呢 我们可以再利用一次双指针的方法来确认cur的位置一开始cur0dest-1 遍历数组当cur遇到0时dest2当cur遇到非0时cur 这里会有一种边界情况需要我们去考虑 示例1 0 2 3 0 我们通过上述方式来确定cur时会出现以下这种情况 会出现dest越界的情况我们考科一让size-1的位置置为0然后cur--dest-2这样就可以解决问题了 然后从后向前遇到0就是置两次0遇到非0就是复制咯这一步简单 解题代码
class Solution {
public:void duplicateZeros(vectorint arr) {int dest-1;int cur0;int sizearr.size();//确认cur的位置while(cursize){if(arr[cur]0)dest2;else dest;if(destsize-1)break;cur;}//边界情况示例1 0 2 3 0,当dest的位置越界了if(destsize){arr[size-1]0;dest-2;cur--;}while(cur0){if(arr[cur]!0){arr[dest--]arr[cur--];}else {arr[dest--]0;arr[dest--]0;cur--;}}}
};