删除数组中全部的某一个元素
int removeElement(vector<int> &nums, int val)
{
int slow = 0;
for (int fast = 0; fast < nums.size(); fast++)
{
if (nums[fast] != val)
{
nums[slow] = nums[fast];
slow++;
}
}
}
快的在前面判断是不是等于val 若不等于就赋值给slow然后slow++
------------------------------------------------------------------------------------
27移除零
当slow是0时与快指针交换 有多少零就交换多少次
如果slow等于零了那么fast执行++也等于0 然后fast再++再进行交换
void moveZeroes(vector<int> &nums)
{
int slow = 0;
int size = nums.size();
for (auto fast = 0; fast < nums.size(); fast++)
{
if (nums[slow] == 0 && nums[fast] != 0)
{
nums[slow++] = nums[fast];
nums[fast] = 0;
}
if (nums[slow] != 0)
{
slow++;
}
}
}
要fast比slow快再进行交换
void moveZeroes(vector<int> &nums)
{
int slow = 0;
int size = nums.size();
for (auto fast = 0; fast < nums.size(); fast++)
{
if (nums[slow] == 0 && nums[fast] != 0 && fast > slow)
{
nums[slow++] = nums[fast];
nums[fast] = 0;
}
if (nums[slow] != 0)
{
slow++;
}
}
}
977有序数组的平方
双指针不只有快慢指针还有左右指针 两边到中间也是
有负数所以都是两边最大中间小 k代表位置 i<=j 的等于是要算相遇的那个元素再插入到新的容器
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums)
{
int i = 0;
int k = nums.size()-1;
int j = nums.size()-1;
vector<int> v(nums.size(),0);
while(i<=j)
{
if(nums[i]*nums[i]>nums[j]*nums[j])
{
v[k--]=nums[i]*nums[i];
i++;
}else
{
v[k--]=nums[j]*nums[j];
j--;
}
}
return v;
}
};
----------------------------------------------------------
力扣844
给定
s
和t
两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回true
。#
代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。
示例 1:
输入:s = "ab#c", t = "ad#c" 输出:true 解释:s 和 t 都会变成 "ac"。
关键步骤在于slow-- 不需要别的可以覆盖的
class Solution {
public:
void get(string& s)
{
int slow = 0;
int fast = 0;
for(;fast<s.length();fast++)
{
if(s[fast]!='#')
{
s[slow++]=s[fast];
}else if(slow!=0)
{
slow--;
}
}
s.resize(slow);
}
bool backspaceCompare(string s, string t) {
get(s);
get(t);
return s==t;
}
};