public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); // 银行的数量 int d = sc.nextInt(); // 约定的距离 int[] num = new int[100000000]; int minA = Integer.MAX_VALUE; // 坐标最小值 int maxA = 0; // 坐标最大值 for (int i = 0; i < n; i++) { int a = sc.nextInt(); int b = sc.nextInt(); num[a] = b; // 在a位置有b金额 maxA = Math.max(a, maxA); minA = Math.min(a, minA); } // 算法主题部分 int postMax = 0; int globalMax = 0; for (int i = minA; i < maxA - d + 1; i++) { if (num[i] > postMax) { postMax = num[i]; } if (num[i+d] != 0) { int tempMax = postMax + num[i + d]; if (tempMax > globalMax) { globalMax = tempMax; } } } System.out.println(globalMax); }大致思想就是滑动窗口,边界等细节方面可能需要微调。为了方便数组开这么大,没在牛客打过题,不知道数组开这么大会不会爆掉。
点赞 4

相关推荐

AAA专业长城贴瓷砖刘大爷:这样的简历我会直接丢进垃圾桶,花里胡哨的
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务