移除元素
class Solution { public: int removeElement(vector<int>& nums, int val) { int slotIndex = 0; for(int fastIndex = 0; fastIndex < nums.size(); fastIndex++){ if(nums[fastIndex] != val){ nums[slotIndex++] = nums[fastIndex]; } } return slotIndex; } };
学习了一下双指针法解题。双指针法倒是因为快速排序会用到知道一点。跟着刷题也系统性的接触了一下。重点学习了快慢指针 "一个循环完成两层循环的工作"的思想。
有序数组的平方
题目链接 代码随想录 (programmercarl.com)
class Solution { public: vector<int> sortedSquares(vector<int>& nums) { int index = nums.size() - 1; vector<int> result(nums.size(), 0); for(int l = 0, r = nums.size() - 1;l <= r;){ if (nums[l] * nums[l] < nums[r] * nums[r]){ result[index--] = nums[r] * nums[r]; r--; } else{ result[index--] = nums[l] * nums[l]; l++; } } return result; } };
同样使用双指针法,不过这次是左右指针。因为根据题目特性可能出现负数的平方数大于该位置的正整数的情况。但是因为平方运算之前是顺序排列,所以可以使用双指针法,比较大小后更新左或者右指针位置。因为如果右指针的这一位比左指针的大,那么肯定比左指针靠右的所有数据要大,所以此时新的数组数据为右指针指向的数据,同时右指针左移,反之一样。总的来说还算好理解。
标签:size,nums,int,Day2,fastIndex,vector,刷题,LeetCode,指针 From: https://www.cnblogs.com/tianmaster/p/16846346.html