leetcodeday04 移动0 盛水最多容器

leetcodeday04 移动0 盛水最多容器 双指针一个指针扫描有用数据遇到不合适的直接跳过慢指针用于指向下一个可以直接写入数据的位置快指针遇到0直接跳过遇到其他数字触发交换将快慢指针指向内容交换从而将0后移。注意slow指针只在识别到一个非0数字之后往后移动一单位。他永远是慢于或者等于快指针的这保证了交换的都是符合要求的区域。class Solution { public: void moveZeroes(vectorint nums) { int slow0; for(int fast0;fastnums.size();fast){ if (nums[fast]!0){ if (fast ! slow) { swap(nums[fast],nums[slow]); } slow; } } } };盛水最多同样双指针若从左到右每个长宽计算一次时间复杂度太高。这里双指针一个在首一个在数组尾部先从最长长度开始毕竟想最大面积一定得有较大的长和高然后减小长度从哪侧减小从两指针对应高度较低侧减小因为你盛水时两个高取得最矮那个只有从矮那侧减小长度之后才可能碰到高的柱子从而提高首尾两个柱子的最低高度class Solution { public: int maxArea(vectorint height) { int high; int temper; int left 0,maximum 0; int right height.size()-1; while(left right){ high min(height[left],height[right]); temper high * (right - left); maximum max(maximum,temper); if (height[left]height[right]){ left; } else {right--;} } return maximum; } };