LeetCode-Array-要素の削除(Java)

2733 ワード

タイトルの説明:
配列numsと値valを指定すると、valに等しいすべての数値の要素をその場で除去し、除去後の配列の新しい長さを返す必要があります.
余分な配列空間を使用しないでください.入力配列をその場で変更し、O(1)余分な空間を使用する条件で完了する必要があります.
要素の順序は変更できます.配列の中で新しい長さの後ろを超える要素を考慮する必要はありません.
例1:
与えられたnums=[3,2,2,3],val=3,
関数は新しい長さ2を返し、numsの最初の2つの要素は2です.
配列の中で新しい長さの後ろを超える要素を考慮する必要はありません.
方法:
両指針法:
  • 問題は元のアドレスで直接新しいデータを上書きする必要があるため、26問題と同じように速い指針法を採用することができますが、ここで速いポインタはj=1から始まります.最初の要素がvalに等しい可能性があるからです.
  • はnums[j]!=val、nums[i]=nums[j]を先に、i++を;
  • 時間複雑度はO(n)である.

  • 詳細コード:
    class Solution {
        public int removeElement(int[] nums, int val) {
            int i =0;
            for(int j =0;j<nums.length;j++){
                if(nums[j]!=val){
                    nums[i] =nums[j];
                    i++;
                }
            }
            return i;
        }
    }