給定乙個陣列 nums 和乙個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。主要思路:定義乙個變數,對不重複的值計數。for迴圈完成。
存在的問題 就是值可以計算出當前不相同值,陣列的值是不符合要求的。
這種思路在移除元素較多時更適合使用,最極端的情況是全部元素都需要移除,遍歷一遍結束即可
時間複雜度:o(n) 空間複雜度o(1)
public
static
intremoveelement3
(int
nums,
int val)
}return count;
}
主要思路:用乙個變數去記錄陣列的長度,然後處理兩種情況,一種是當前的值等於val 就將陣列中最後的值賦值給當前相同的值,m 用來不斷減少陣列的長度。否則的話 是另一種情況 如果不相等 直接i++ 判斷下乙個就可以。
這種思路在移除元素較少時更適合使用,最極端的情況是沒有元素需要移除,遍歷一遍結束即可
時間複雜度:o(n),空間複雜度:o(1)
public
static
intremoveelement4
(int
nums,
int val)
else
}return m;
}
實現思路:乙個快指標 乙個慢指標。用快指標來判斷是否相等 不相等賦值給慢指標,慢指標的作用是來定位前面如果有重複的直接跳過去。
時間複雜度:o(n)
空間複雜度:o(1)
public
static
intremoveelement5
(int
nums,
int val)
//如果相等 不做 等待下標i來進行覆蓋
}return i;
}
實現思路:通過快慢指標 在一種比較極端的情況下。nums[1,2,3,5,4] val = 4 在最後才可以找到需要刪除的元素,雖然nums中的值沒有改變,但是通過m-- 停止了迴圈 i=4。
當我們遇到 nums[i] = valnums[i]=val 時,我們可以將當前元素與最後乙個元素進行交換,並釋放最後乙個元素。這實際上使陣列的大小減少了 1。
時間複雜度:o(n)
空間複雜度:o(1)
public
static
intremoveelement6
(int
nums,
int val)
else
}return i++
;}
LeetCode 27 移除元素
27 移除元素 給定乙個陣列和乙個值,在這個陣列中原地 移除指定值和返回移除後新的陣列長度。不要為其他陣列分配額外空間,你必須使用 o 1 的額外記憶體原地 修改這個輸入陣列。元素的順序可以改變。超過返回的新的陣列長度以外的資料無論是什麼都沒關係。示例 給定 nums 3,2,2,3 val 3,你...
LeetCode 27 移除元素
給定乙個陣列 nums 和乙個值 val,你需要原地 移除所有數值等於 val 的元素,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。示例 1 給定 nums 3,2,2,3...
leetcode27移除元素
給定乙個陣列 nums 和乙個值 val,你需要原地 移除所有數值等於 val 的元素,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。示例 1 給定 nums 3,2,2,3...