jsはソートされた配列の重複を削除する実装をします

並べ替えられた配列内の重複を削除するための 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;
};

おすすめ

転載: blog.csdn.net/weixin_52797317/article/details/128731428