好几天没写啦,不过这段时间一直都在做题,没有一天拉下,这几天写了不少双指针问题,动态规划问题也在慢慢地熟练了,看数据,找规律,找前一“秒”的状态,找出状态转换方程。到双指针问题,我真是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]写在了前面,导致指针溢出,&&就是如果前面不成立就不关注后面了,||是如果前面成立,也就不看后面的,一定要注意这个是会影响变量的变化!