leetcode中如何解決移除元素問題

這篇文章給大家分享的是有關(guān)leetcode中如何解決移除元素問題的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

“只有客戶發(fā)展了,才有我們的生存與發(fā)展!”這是創(chuàng)新互聯(lián)建站的服務(wù)宗旨!把網(wǎng)站當(dāng)作互聯(lián)網(wǎng)產(chǎn)品,產(chǎn)品思維更注重全局思維、需求分析和迭代思維,在網(wǎng)站建設(shè)中就是為了建設(shè)一個不僅審美在線,而且實(shí)用性極高的網(wǎng)站。創(chuàng)新互聯(lián)對網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)站開發(fā)、網(wǎng)頁設(shè)計(jì)、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)推廣、探索永無止境。

 

題目鏈接

https://leetcode-cn.com/problems/remove-element/

 

題目描述

給定一個數(shù)組 nums 和一個值 val,你需要原地移除所有數(shù)值等于 val 的元素,返回移除后數(shù)組的新長度。

不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成。

元素的順序可以改變。你不需要考慮數(shù)組中超出新長度后面的元素。

示例 1:

給定 nums = [3,2,2,3], val = 3,

函數(shù)應(yīng)該返回新的長度 2, 并且 nums 中的前兩個元素均為 2。

你不需要考慮數(shù)組中超出新長度后面的元素。
 

示例 2:

給定 nums = [0,1,2,2,3,0,4,2], val = 2,

函數(shù)應(yīng)該返回新的長度 5, 并且 nums 中的前五個元素為 0, 1, 3, 0, 4。

注意這五個元素可為任意順序。

你不需要考慮數(shù)組中超出新長度后面的元素。
   

解題方案

 

第一種思路

  • 標(biāo)簽:拷貝覆蓋

  • 主要思路是遍歷數(shù)組nums,每次取出的數(shù)字變量為num,同時設(shè)置一個下標(biāo)ans

  • 在遍歷過程中如果出現(xiàn)數(shù)字與需要移除的值不相同時,則進(jìn)行拷貝覆蓋nums[ans] = num,ans自增1

  • 如果相同的時候,則跳過該數(shù)字不進(jìn)行拷貝覆蓋,最后ans即為新的數(shù)組長度

  • 這種思路在移除元素較多時更適合使用,最極端的情況是全部元素都需要移除,遍歷一遍結(jié)束即可

  • 時間復(fù)雜度:O(n),空間復(fù)雜度:O(1)

 

第一種代碼

  • Java版本

class Solution {
   public int removeElement(int[] nums, int val) {
       int ans = 0;
       for(int num: nums) {
           if(num != val) {
               nums[ans] = num;
               ans++;
           }
       }
       return ans;
   }
}
 
  • JavaScript版本

/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
var removeElement = function(nums, val) {
   let ans = 0;
   for(const num of nums) {
       if(num != val) {
           nums[ans] = num;
           ans++;
       }
   }
   return ans;
};
   

第二種思路

  • 標(biāo)簽:交換移除

  • 主要思路是遍歷數(shù)組nums,遍歷指針為i,總長度為ans

  • 在遍歷過程中如果出現(xiàn)數(shù)字與需要移除的值不相同時,則i自增1,繼續(xù)下一次遍歷

  • 如果相同的時候,則將nums[i]與nums[ans-1]交換,即當(dāng)前數(shù)字和數(shù)組最后一個數(shù)字進(jìn)行交換,交換后就少了一個元素,故而ans自減1

  • 這種思路在移除元素較少時更適合使用,最極端的情況是沒有元素需要移除,遍歷一遍結(jié)束即可

  • 時間復(fù)雜度:O(n),空間復(fù)雜度:O(1)

 

第二種代碼

  • Java版本

class Solution {
   public int removeElement(int[] nums, int val) {
       int ans = nums.length;
       for (int i = 0; i < ans;) {
           if (nums[i] == val) {
               nums[i] = nums[ans - 1];
               ans--;
           } else {
               i++;
           }
       }
       return ans;
   }
}
 
  • JavaScript版本

/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
var removeElement = function(nums, val) {
   let ans = nums.length;
   for (let i = 0; i < ans;) {
       if (nums[i] == val) {
           nums[i] = nums[ans - 1];
           ans--;
       } else {
           i++;
       }
   }
   return ans;
};
   

畫解

leetcode中如何解決移除元素問題

leetcode中如何解決移除元素問題

leetcode中如何解決移除元素問題

leetcode中如何解決移除元素問題

leetcode中如何解決移除元素問題

leetcode中如何解決移除元素問題

leetcode中如何解決移除元素問題

leetcode中如何解決移除元素問題

感謝各位的閱讀!關(guān)于“l(fā)eetcode中如何解決移除元素問題”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

網(wǎng)站標(biāo)題:leetcode中如何解決移除元素問題
文章起源:http://bm7419.com/article46/pscdeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、、定制開發(fā)、ChatGPT、外貿(mào)建站全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名