移除元素--双指针法
生活随笔
收集整理的這篇文章主要介紹了
移除元素--双指针法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
數(shù)組的元素在內(nèi)存地址中是連續(xù)的,不能單獨(dú)刪除數(shù)組中的某個(gè)元素,只能覆蓋
暴力法
兩層for循環(huán),一個(gè)for循環(huán)遍歷數(shù)組元素 ,第二個(gè)for循環(huán)更新數(shù)組。
// 時(shí)間復(fù)雜度:O(n^2) // 空間復(fù)雜度:O(1) class Solution { public:int removeElement(vector<int>& nums, int val) {int size = nums.size();for (int ii = 0; ii < size; ii++) {if (nums[i] == val) { // 發(fā)現(xiàn)需要移除的元素,就將數(shù)組集體向前移動一位for (int jj = ii + 1; jj < size; jj++) {nums[jj - 1] = nums[jj];}ii--; // 因?yàn)橄卤韎以后的數(shù)值都向前移動了一位,所以i也向前移動一位size--; // 此時(shí)數(shù)組的大小-1}}return size;} };雙指針法
雙指針法(快慢指針法):「通過一個(gè)快指針和慢指針在一個(gè)for循環(huán)下完成兩個(gè)for循環(huán)的工作。」
class Solution{ public:int removeElement(vector<int>& nums,int val){int slowIndex=0;int size=nums.size();for(int fastIdex=0;fastIdex<size;fastIdex++){if(nums[fastIdex]!=val){ //快指針發(fā)現(xiàn)所指元素不是要移除的元素,就把指向的值賦值給慢指針,然后一起向前走nums[slowIndex++]=nums[fastIdex];}}return slowIndex;//返回的索引是多少就說明有多少元素,比如1234,返回索引4 說明有4個(gè)元素} };總結(jié)
以上是生活随笔為你收集整理的移除元素--双指针法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数组理论知识
- 下一篇: 长度最小的子数组--滑动窗口