ダブルポインタの問題とスライディングウィンドウの問題

数日間書いていないのですが、しばらく作業していて、1日でうまくいきませんでした。最近、多くのダブルポインターの問題を書いており、動的プログラミングの問題は徐々に熟達してきています。前の「2番目」の状態を見つけ、状態遷移方程式を見つけます。ダブルポインターの問題については、2分で問題を解決する方法を本当に理解しましたが、質問が実現したとき、答えは常に間違っていて、理由がわかりませんでした。後で、ポインターの変化を大まかに理解していることがわかりました。しかし、それはコードに当てはまらず、コードの実装に不明確なポインターポインティングの問題がありました。以下に質問をリストします:(この質問は元の質問ではありません)

この質問はゲームのプレイ中に出されたもので、目が使いづらかったです。0要素の相対的な順序を維持するために書き始めました。はははは、検証時間に誤りがあり、自分に盲目でしたが、後で自分の質問に誤りがあることがわかりました。ここで、ダブルポインターの問題です。1つのケースでポインター1とポインター2を移動する方法と、2番目のケースでポインター2とポインター1を移動する方法を明確に考える必要があります。これは重要です!

以下にコードを示します。

    public void moveZeroes(int[] nums) {
        if(nums.length==0) return;
        if(nums.length==1) return;
        int i=0;
    
        while (i<nums.length&&nums[i]!=0) i++;
        int j=i;
        for(int k=i;k<nums.length;k++){
            if(nums[k]!=0){
                nums[j]=nums[k];
                nums[k]=0;
                j++;
                while(nums[j]!=0){
                    j++;
                }
            }
        }
        return;
    }

このとき、nums [i]を手前に書き込んでいるとポインタがオーバーフローし、&&は表が成立していないと裏に注意がなく、||が表が成立していると裏を見ないという問題がありますはい、これは変数の変更に影響することに注意する必要があります!

元の記事を公開17件 ・いい ね0 訪問数143

おすすめ

転載: blog.csdn.net/qq_33286699/article/details/105487037