您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)leetcode中如何解決移除元素問(wèn)題的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
https://leetcode-cn.com/problems/remove-element/
給定一個(gè)數(shù)組 nums
和一個(gè)值 val
,你需要原地移除所有數(shù)值等于 val
的元素,返回移除后數(shù)組的新長(zhǎng)度。
不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 O(1)
額外空間的條件下完成。
元素的順序可以改變。你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
示例 1:
給定 nums = [3,2,2,3], val = 3,
函數(shù)應(yīng)該返回新的長(zhǎng)度 2, 并且 nums 中的前兩個(gè)元素均為 2。
你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
示例 2:
給定 nums = [0,1,2,2,3,0,4,2], val = 2,
函數(shù)應(yīng)該返回新的長(zhǎng)度 5, 并且 nums 中的前五個(gè)元素為 0, 1, 3, 0, 4。
注意這五個(gè)元素可為任意順序。
你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
標(biāo)簽:拷貝覆蓋
主要思路是遍歷數(shù)組nums,每次取出的數(shù)字變量為num,同時(shí)設(shè)置一個(gè)下標(biāo)ans
在遍歷過(guò)程中如果出現(xiàn)數(shù)字與需要移除的值不相同時(shí),則進(jìn)行拷貝覆蓋nums[ans] = num,ans自增1
如果相同的時(shí)候,則跳過(guò)該數(shù)字不進(jìn)行拷貝覆蓋,最后ans即為新的數(shù)組長(zhǎng)度
這種思路在移除元素較多時(shí)更適合使用,最極端的情況是全部元素都需要移除,遍歷一遍結(jié)束即可
時(shí)間復(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,總長(zhǎng)度為ans
在遍歷過(guò)程中如果出現(xiàn)數(shù)字與需要移除的值不相同時(shí),則i自增1,繼續(xù)下一次遍歷
如果相同的時(shí)候,則將nums[i]與nums[ans-1]交換,即當(dāng)前數(shù)字和數(shù)組最后一個(gè)數(shù)字進(jìn)行交換,交換后就少了一個(gè)元素,故而ans自減1
這種思路在移除元素較少時(shí)更適合使用,最極端的情況是沒(méi)有元素需要移除,遍歷一遍結(jié)束即可
時(shí)間復(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;
};
感謝各位的閱讀!關(guān)于“l(fā)eetcode中如何解決移除元素問(wèn)題”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。