数组:额外加餐的第二天
1.leetcode 283.移动零
题目链接
class Solution {
public:void moveZeroes(vector<int>& nums) {int fastIndex=0;int slowIndex=0;for(int fastIndex=0;fastIndex<nums.size();fastIndex++){if(nums[fastIndex]!=0){nums[slowIndex++]=nums[fastIndex];}}for(int i=slowIndex;i<nums.size();i++){nums[i]=0;}}
};
思路总结:这道题用的是(双指针)快慢指针的方法。
快指针先走,如果快指针遇到的数字不是0,那么就把这个数字传给慢指针所指在的位置,也就是把不是0的数字直接覆盖到前面去,从slowIndex开始后面全部赋值为0。
相当于对整个数组移除元素0,然后slowIndex之后都是移除元素0的冗余元素,把这些元素都赋值为0就可以了。
2.leetcode 844.比较含退格的字符串
题目链接
class Solution {
public:bool backspaceCompare(string s, string t) {string a;string b;for(int i=0;i<s.size();i++){if(s[i]!='#') a+=s[i];else{if(!a.empty()){a.pop_back();}}}for(int i=0;i<t.size();i++){if(t[i]!='#') b+=t[i];else{if(!b.empty()){b.pop_back();}}}if(a==b) return true;else return false;}
};
思路总结:这道题看别人是可以双指针写出来的,但是我实在是想不出怎么写,所以我只能想到用字符串来进行比较。先定义的字符串相当于栈,但遇到退格字符的时候就出栈,遍历完之后我们就比较这两个栈,看是否符合条件。这种解法还是比较简单暴力的。
3.leetcode 977.有序数组的平方
题目链接
class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int k=nums.size()-1;vector<int> result(nums.size(),0);for(int i=0,j=nums.size()-1;i<=j;){if(nums[i]*nums[i]<nums[j]*nums[j]){result[k--]=nums[j]*nums[j];j--;}else{result[k--]=nums[i]*nums[i];i++;}}return result;}
};
思路总结:这道题也是用到了双指针,双指针在很多比赛和面试中会用到很多,所以一定要掌握双指针这个算法。
这道题的思路就是先定义一个结果数组,我们最后也是返回这个数组。然后,我们遍历这个数组,并且定义两个指针i和j,一个在最前面,一个在最后面,进行平方比较,大的那一方,先放进数组里面,再进行移动指针,这样遍历完之后就完成这个题目的要求。
