leetcode 1499.满足不等式的最大值

原题

1499.满足不等式的最大值
2020年6月28日 195周赛第四题
在这里插入图片描述

题解

方法一

暴力遍历所有数对。此方法超时。
java代码:

/*暴力法
63 / 65 个通过测试用例   状态:超出时间限制
2020.06.29 18:28
*/
class Solution {
    public int findMaxValueOfEquation(int[][] points, int k) {
        int ans=Integer.MIN_VALUE;
        for(int i=0;i<points.length;i++){
            for(int j=i+1;j<points.length;j++){
                if(points[j][0]-points[i][0]<=k){
                    ans=Math.max(ans,points[j][0]-points[i][0]+points[i][1]+points[j][1]);
                }
                else{
                    break;
                }
            }            
        }
        return ans;
    }
}

方法二

本方法代码java示例:

/*
@v7fgg 有参考
执行用时:5 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:102.8 MB, 在所有 Java 提交中击败了100.00%的用户
2020年6月29日 21:09
*/
class Solution {
    public int findMaxValueOfEquation(int[][] points, int k) {
        int ans=Integer.MIN_VALUE;
        int i=0;
        int j=1;
        int da=points[i][1]-points[i][0];
        while(j<points.length){
            if(points[j][0]-points[i][0]>k){//以下都括在if内,是因为不符合条件时,
            //j发生变化也会更新da到最接近j的那个差
                while(i<j&&points[j][0]-points[i][0]>k){
                    i++;//i和j不够近的时候i要靠近j,终止条件是ij相等或足够近
                }
                da=points[i][1]-points[i][0];
                //先存下da,这也是对于后边点的小限
                if(i==j){//如果靠的都一样了才够近,j就要后移了,保证ij不等
                    j++;
                    continue;
                }
                int linshi=i+1;
                while(linshi<j){
                    if(da<=points[linshi][1]-points[linshi][0]){
                        da=points[linshi][1]-points[linshi][0];
                        i=linshi;
                        //先判断符合大于条件,并且更新da,再把i赋值回去
                    }
                    linshi++;
                }
            }            
            ans=Math.max(ans,points[j][1]+points[j][0]+da);
            //由于下一步就要j自加1了,因此此时的j也要加入比较
            //每次j自加变化之前都要进行如下if操作
            if(da<=points[j][1]-points[j][0]){
                da=points[j][1]-points[j][0];
                i=j;
            }
            j++;
        }
        return ans;
    }
}

方法二参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱抱抱呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值