双指针法
设置两个指针,一个指向第一条垂直线,一个指向最后一条垂直线,记录最大面积为area,area初始值等于n*Math.min(A0,An),然后比较左右两根垂直线哪一条更短,更短的向中间移动,计算新的面积值然后如果比原本的面积更大就更新area.
public int maxArea(int[] height) {
int i=0,j=height.length-1;
int area=j*Math.min(height[i],height[j]);
while (i<j){
if(height[i]<height[j]){
i++;
}else {
j--;
}
area=Math.max(area,(j-i)*(Math.min(height[i],height[j])));
}
return area;
}
定义 nums[0...i] 为非 val 的数列,遍历整个数列不断的维护这个定义
public int removeElement(int[] nums, int val) {
int k=0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=val){
nums[k]=nums[i];
k++;
}
}
return k;
}