並べ替えられた配列内の重複を削除するための JavaScriptjs 実装。
元のタイトル: 配列番号を昇順で指定した場合、各要素が 1 回だけ表示されるように、繰り返される要素を所定の位置で削除し、削除された配列の新しい長さを返してください。要素の相対的な順序は一貫している必要があります。一部の言語では配列の長さを変更できないため、結果は配列 nums の最初の部分に配置する必要があります。より標準的には、重複を削除した後に k 個の要素が存在する場合、nums の最初の k 要素が最終結果を保持する必要があります。最終結果を num の最初の k 位置に挿入した後、k を返します。余分なスペースを使用する代わりに、入力配列をインプレースで変更し、O(1) 個の余分なスペースを使用して変更する必要があります。
著者: LeetCode
リンク: https://leetcode.cn/leetbook/read/top-interview-questions-easy/x2gy9m/
出典: LeetCode
この質問では、ダブル ポインタの方法を採用し、最初のポインタ leftを定義し、配列の左から 1 項目を加えたトラバースを開始します。トラバースするとき、 i は右ポインタと同等です。nums[left]!=nums[i] の場合、 left Add 1 を与え、位置 i の配列項目を左の位置に 1 を加えたものに割り当てることができます。nums[left]==nums[i] の場合、このサイクルをスキップし、i は右に移動し続けます。
つまり、左ポインタがある場合、後ろの最初の要素から開始して前と1つずつ比較し、左ポインタが指す要素と異なる要素を見つけるまで、左に移動します右側に、見つかった要素の値を左側の指定された位置に割り当てます。
配列を再配置した後、左 + 1 の位置とその後ろの配列要素を切り取り、配列の長さを返す必要があります。
具体代码如下:
/**
* @param {number[]} nums
* @return {number}
*/
// 双指针法
var removeDuplicates = function(nums) {
if(nums.length==0){
return;
}
// 定义一个左指针
var left = 0;
// 循环遍历数组
for(var i = left+1;i<nums.length;i++){
if(nums[left]!==nums[i]){
left=left+1;
nums[left]=nums[i];
}
continue;
}
nums.splice(left+1,nums.length-1);
return nums.length;
};