双指针问题和滑动窗口问题

好几天没写啦,不过这段时间一直都在做题,没有一天拉下,这几天写了不少双指针问题,动态规划问题也在慢慢地熟练了,看数据,找规律,找前一“秒”的状态,找出状态转换方程。到双指针问题,我真是2分钟就把问题怎么解决想了出来,但是有一道题实现时候,总是答案不对,我也不知道为什么,后来才发现,我只是大致的把指针的变化想明白了,并没有落在代码上,在代码实现上出现了指针指向不明确问题。下面我们列出题目:(这道题不是原来那道题)

这道题,一边玩游戏一边做的,眼神都不好用了,开始写的是保持0元素的相对顺序,哈哈哈哈,验证时候一直不对,我自己都蒙了,后来才发现我题读错了,双指针问题,一定要想清楚,一种情况指针1怎么动,指针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;
    }

做这个时候,我有个问题就是在while的时候把nums[i]写在了前面,导致指针溢出,&&就是如果前面不成立就不关注后面了,||是如果前面成立,也就不看后面的,一定要注意这个是会影响变量的变化!

发布了17 篇原创文章 · 获赞 0 · 访问量 143

猜你喜欢

转载自blog.csdn.net/qq_33286699/article/details/105487037
今日推荐