題目描述:
給你乙個陣列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...