【LeetCodeの毎日の質問】——283.モバイルゼロ

[トピックカテゴリ] 1 つ

  • ダブルポインタ

2【問題難易度】

  • 単純

3 [トピック番号]

  • 283. ムービングゼロ

4 【タイトル説明】

  • 配列 nums を指定して、ゼロ以外の要素の相対的な順序を維持しながら、すべての 0 を配列の末尾に移動する関数を作成します。
  • 配列はコピーせずにその場で操作する必要があることに注意してください。

5つの【話題例】

  • 例 1:

    • 入力: 数値 = [0,1,0,3,12]
    • 出力: [1,3,12,0,0]
  • 例 2:

    • 入力: 数値 = [0]
    • 出力: [0]

6つの【問題解決アイデア】

  • タイトルは、値がゼロの要素を配列の後ろに置くというものですが、考え方を変えて、ゼロではない要素を相対的な順序で配列の先頭に置きます。
  • 上記の考え方に基づいて、i と j という 2 つのポインターを定義できます。
    • i ポインタ: 配列内のゼロ以外の値を見つけるために使用されます。
    • j ポインタ: 配列内の最初のゼロ位置を指します。
  • 配列全体を走査し、i ポインターがゼロ以外の値に遭遇した場合は、それを j ポインターと交換します。j ポインターは常に配列内の最初のゼロの位置を指すため、直接交換すると、配列内のゼロ以外の要素が置き換えられます。 array 相対的な順序で配列の前に置きます
  • 交換後、j ポインタは 1 位置戻り、次のゼロ位置を指し、次の交換に備えます。
  • i ポインタはゼロ以外の値を検索し続けます。
  • この質問には戻り値は必要ありません

7 [タイトルプロンプト]

  • 1 < = 数値。長さ < = 1 0 4 1 <= nums.length <= 10^{4}1<=数値_ _ _ _ _ _ _<=1 04
  • − 2 31 < = nums [ i ] < = 2 31 − 1 -2^{31} <= nums[i] <= 2^{31} - 1231<=数値[ i ] _ _ _<=2311

8 [上級トピック]

  • 実行される操作の数を最小限に抑えることはできますか?

9 [時間頻度]

  • 時間計算量: O ( n ) O(n)O(n),其中 n n nは受信配列の長さです
  • 空間複雑さ: O ( 1 ) O(1)

10 [コード実装]

  1. Java言語バージョン
class Solution {
    
    
    public void moveZeroes(int[] nums) {
    
    
        for(int i = 0,j=0;i<nums.length;i++){
    
    
            if(nums[i] != 0){
    
    
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j++] = temp;
            }
        }
    }
}
  1. C言語版
void moveZeroes(int* nums, int numsSize)
{
    
    
    for(int i = 0,j=0;i<numsSize;i++)
    {
    
    
        if(nums[i] != 0)
        {
    
    
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j++] = temp;
        }
    }
}
  1. Python言語バージョン
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        j = 0
        for i in range(0,len(nums)):
            if nums[i] != 0:
                temp = nums[i]
                nums[i] = nums[j]
                nums[j] = temp
                j += 1
  1. C++言語バージョン
class Solution {
    
    
public:
    void moveZeroes(vector<int>& nums) {
    
    
        for(int i = 0,j=0;i<nums.size();i++)
        {
    
    
            if(nums[i] != 0)
            {
    
    
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j++] = temp;
            }
        }
    }
};

イレブン【提出結果】

  1. Java言語バージョン
    ここに画像の説明を挿入

  2. C言語版
    ここに画像の説明を挿入

  3. Python言語バージョン
    ここに画像の説明を挿入

  4. C++言語バージョン
    ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/IronmanJay/article/details/129581992