不定长滑动数组错误解析 ,1493题
1.原错误代码:
#define max(a,b) ((a>b)?(a):(b)) int longestSubarray(int* nums, int numsSize) { int ans=0,left=0,count=0; for(int right=0;right<numsSize;right++){ if(nums[right]==0) count++; while(count>1){ left++; if(nums[right]==0) count--; } ans = max(ans,right-left+1); } return ans-1; }
2.现正确代码:
#define MAX(a, b) ((b) > (a) ? (b) : (a)) int longestSubarray(int* nums, int numsSize) { int ans=0,cnt=0,left=0; for(int right=0;right<numsSize;right++){ cnt += 1 - nums[right]; //巧妙的解决了窗口中0的个数问题,避免写复杂的if-else判断逻辑 while(cnt > 1){ cnt -= 1 - nums[left]; left++; } ans = MAX(ans,right-left); } return ans; }
3.总结:
错误原因:没有注意到边界情况,写错了左右边界

浙公网安备 33010602011771号