LeetCode簡單題15 刪除重複元素

2021-10-04 19:49:26 字數 1274 閱讀 7597

題目描述:

給你乙個陣列nums和乙個值val,你需要在原地移除所有數值等於val的元素,並返回移除後陣列的新長度。

不要使用額外的陣列空間,你必須僅使用o(1)的空間複雜度並原地修改輸入陣列。

元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。

樣例:

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

函式應該返回新的長度2,病區nums中的前兩個元素均為2.

你不需要考慮陣列中超出新長度後面的元素。

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

函式應該返回新的長度5,並且nums中的前5個元素為:0,1,3,0,4

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

題解:

*方法一:*雙指標,乙個新陣列的指標len在陣列尾部為初始值,遍歷過程中遇到不等於val的元素就賦給下標為len的位置,然後len右移。此方法直接將原陣列前len個元素覆蓋,後邊的元素沒有任何改變。但新陣列不等於val部分元素的先後順序沒有變。

*方法二:*雙指標,此時len在陣列尾部為初始值,從左開始遍歷過程中遇到等於val的元素就將其和陣列尾部下標為len的元素交換,然後len左移。此方法通過交換將陣列等於val的元素都移到陣列尾部,不等於val的元素都移到陣列首部。但新陣列不等於val部分的先後順序已經被打亂,和原陣列順序不一致,題目表示這種情況是允許的。

**:

//方法一:前邊覆蓋,不管後邊的

public

static

intremoveelement

(int

nums,

int val)

val=3,之後

int len =0;

for(

int i =

0;i < nums.length;i ++)}

return len;

}//方法二:交換,把要刪除的數放在後邊

public

static

intremoveelement

(int

nums,

int val)

val=3,之後

int len = nums.length;

for(

int i =

0;i < len;

)else

}return len;

}

LeetCode刷題之旅(簡單 15) 加一

2019年6月11日 目錄 題目 錯誤思路 資料型別轉換,運算 解決方法1 遞迴檢測進製 思路 效能結果 解決方法2 思路簡潔的解法 思路 效能結果 小結 public static int plusone int digits 2.string轉int並加1 long num long.value...

15道簡單演算法題

出處 1 合併排序,將兩個已經排序的陣列合併成乙個陣列,其中乙個陣列能容下兩個陣列的所有元素 2 合併兩個單鏈表 3 倒序列印乙個單鏈表 4 給定乙個單鏈表的頭指標和乙個指定節點的指標,在o 1 時間刪除該節點 5 找到鍊錶倒數第k個節點 6 反轉單鏈表 7 通過兩個棧實現乙個佇列 8 二分查詢 9...

LeetCode題庫 簡單題

leetcode 題目鏈結 反轉一半 負數不可能是回文 個位數一定是回文 0是回文 問題 如何反轉一半的數字 演算法例項 bool ispalindrome int x if x 10 x為個位數 一定是回文 return1 int revernum 0 while x revernum retur...