今天,做了力扣的27.移除元素(27. 移除元素 - 力扣(LeetCode)),比较优的解法就是双指针。
我的暴力解法:
- class Solution {
- public:
- int removeElement(vector<int>& nums, int val) {
- int size = nums.size();
- for (int i = 0; i < size; i++){
- if(nums[i] == val){
- for(int j = i + 1; j < size; j++){
- nums[j-1] = nums[j];
- }
- i--;
- size--;
- }
- }
- return size;
- }
- };
双指针解法:
- class Solution {
- public:
- int removeElement(vector<int>& nums, int val) {
- int slow = 0, fast;
- for(fast = 0; fast < nums.size();fast ++){
- if(nums[fast] != val){
- nums[slow ++] = nums[fast];
- }
- }
- return slow;
- }
- };
双指针解法视频:
数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili
我对双指针的理解是,在移除元素题目中,有两个指针,分别是快指针和慢指针,快指针是用来找不是val的数组值的,慢指针是用来存贮新数组的,快指针指向的数组值如果不是val,就将此数值存储到慢指针中,同时慢指针向后移动一个位置,如果快指针指向的是val,慢指针啥也不干。最后,慢指针的值就是新的数组的长度。