【蔚来汽车】蔚来20220713第三题-旅游规划 <模拟、滑动窗口>

【蔚来汽车】蔚来20220713第三题-旅游规划

  牛牛对 n 个城市旅游情况进行了规划,已知每个城市有两种属性 x 和 y ,其中 x 表示去第 i 号城市的花费,y 表示在第 i 号城市游玩后会得到的开心值。

  现在牛牛希望从中挑选出一些城市去游玩,但挑选出的城市必须满足任意两个城市之间花费差值的绝对值小于 k

  请你帮他计算出在满足上述条件下能得到最大的开心值是多少

输入描述:

第一横输入两个整数 n 和 k

接下来 n 行,每行输入两个整数 x 和 y ,分别表示每个城市的两种属性

1 < n <= 100000

1 < k <= 1000000000

0 < x,y <= 1000000000

输出描述:

输出一个整数表示答案

示例输入:

java 复制代码
5 3
1 3
2 1
5 2
3 1
4 3

示例输出:

java 复制代码
6

题解

模拟:先按 x 的大小先排好序,再求最大价值的连续区间

java 复制代码
public class Solution {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int k = in.nextInt();

        int[][] cities = new int[n][2];
        for (int i = 0; i < n; i++) {
            cities[i][0] = in.nextInt();
            cities[i][1] = in.nextInt();
        }
        Arrays.sort(cities, (a, b) -> a[0] - b[0]);

        int maxHappy = 0;
        int curHappy = 0;
        
        
        /* 
        //滑动窗口解法
        for(int i=0,j=0; i<n; i++){
            //当前的Happy值
            curHappy += cities[i][1];

            while (j<=i && cities[i][0]-cities[j][0] >=k){
                curHappy -= cities[j][1];
                j++;
            }
            maxHappy = Math.max(maxHappy,curHappy);
        }*/
        
        for (int i = 0; i < n; i++) {
            int j = i + 1;
            //当前的Happy值
            curHappy = cities[i][1];

            while (j < n && cities[j][0] - cities[i][0] < k) {
                curHappy += cities[j][1];
                j++;
            }
            maxHappy = Math.max(maxHappy, curHappy);
        }
        System.out.println(maxHappy);
    }
}
相关推荐
geats人山人海1 小时前
数据结构第六章c语言 树的存储下二叉树的概念和存储
c语言·数据结构·算法
漂流瓶jz2 小时前
UVA-12627 奇怪的气球膨胀 题解答案代码 算法竞赛入门经典第二版
算法·图论·递归·aoapc·算法竞赛入门经典·uva·12627
jarvisuni2 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
kobesdu2 小时前
流形上的优化:SO(3)与SE(3)的广义加减法在FAST-LIO中如何简化状态估计
人工智能·算法·fastlio
白狐_7982 小时前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法
乐观勇敢坚强的老彭2 小时前
C++信奥:开关门、开关灯问题
开发语言·c++·算法
冻柠檬飞冰走茶2 小时前
PTA基础编程题目集 7-31 字符串循环左移(C语言实现)
c语言·开发语言·数据结构·算法
Hi李耶3 小时前
【LeetCode】4-寻找两个正序数组的中位数
算法·leetcode·职场和发展
图灵机z3 小时前
【算法提高课】AcWing 1027. 方格取数 长期攻克提高课-day3(3/219)
算法
hans汉斯3 小时前
计算机科学与应用|改进MeanShift算法在智能监控视频中的应用研究
图像处理·人工智能·功能测试·深度学习·算法·音视频