leetcode四月十九日解题

5 篇文章 0 订阅

双指针法

设置两个指针,一个指向第一条垂直线,一个指向最后一条垂直线,记录最大面积为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;
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值