豆包11 观光景点组合得分问题

132 阅读1分钟

问题描述

小R正在研究一组观光景点,每个景点都有一个评分,保存在数组 values 中,其中 values[i] 表示第 i 个观光景点的评分。同时,景点之间的距离由它们的下标差 j - i 表示。

一对景点 (i < j) 的观光组合得分为 values[i] + values[j] + i - j,也就是两者评分之和减去它们之间的距离。

小R想知道,在哪种情况下能够获得观光景点组合的最高得分。

使用算法

暴力枚举

算法思路

  1. 初始化变量

    • 定义一个变量ans,用于存储观光组合的最高得分,初始值为0。
  2. 遍历数组

    • 使用一个双重循环来遍历所有可能的景点对(i, j),其中i < j。
    • 外层循环从i = 0到i = values.length - 2。
    • 内层循环从j = i + 1到j = values.length - 1。
  3. 计算得分

    • 对于每一对景点(i, j),计算得分values[i] + values[j] + i - j
  4. 更新最高得分

    • 使用Math.max函数来比较当前得分和ans,并将较大的值赋给ans
  5. 返回结果

    • solution函数返回ans,即观光组合的最高得分。

代码展示

import java.util.Arrays;

public class Main {
    public static int solution(int[] values) {
        int ans = 0;
        for (int i = 0; i < values.length - 1; i++) {
            for (int j = i + 1; j < values.length; j++) {
                ans = Math.max(ans, values[i] + values[j] + i - j);
            }
        }
        // write code here
        return ans; // Placeholder return
    }

    public static void main(String[] args) {
        System.out.println(solution(new int[] { 8, 3, 5, 5, 6 }) == 11 ? 1 : 0);
        System.out.println(solution(new int[] { 10, 4, 8, 7 }) == 16 ? 1 : 0);
        System.out.println(solution(new int[] { 1, 2, 3, 4, 5 }) == 8 ? 1 : 0);
    }
}