You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请判断该算法属于暴力算法(Brute Force)还是贪心算法(Greedy)

算法归类:贪心还是暴力?

先看你的代码(修正了转义字符):

while(true) {
    int n = 0;
    int d = 0;
    int r = 0;
    int outcome = 0;
  
    n = scan.nextInt();
    d = scan.nextInt();
    r = scan.nextInt();

    if ( n + d + r == 0) break;

    int[] morning = new int[n];
    int[] afternoon = new int[n];

    for (int i = 0; i < n; i++) {
        morning[i] = scan.nextInt();
    }
    for (int i = 0; i < n; i++) {
        afternoon[i] = -scan.nextInt();
    }

    for (int i = 0; i < n; i++) {
        int sum = morning[i] + (-afternoon[i]) - d;
        if (sum > 0) outcome += sum * r;
    }
    System.out.printf("%d\n", outcome);
}

先明确两个算法的核心特征:

  • 暴力算法:枚举所有可能的解空间(比如这个问题里所有早晚班次的配对组合),逐一验证后得到结果,时间复杂度通常很高(比如该问题暴力解的时间复杂度是O(n!),需要枚举全排列)。
  • 贪心算法:每一步做出当前局部最优的选择,通过一系列局部最优决策逼近全局最优(比如该问题的经典贪心解法是将早班结束时间升序排序、晚班开始时间降序排序,再一一配对,以此最小化总加班费)。

对你的代码的判断:

你的代码既不属于贪心算法,也不属于暴力算法,它只是一个线性遍历的直接计算逻辑:

  1. 它没有枚举任何解空间,完全不存在暴力尝试的过程;
  2. 它也没有做任何局部最优的决策——只是严格按照输入顺序将第i个早班和第i个晚班配对,没有尝试寻找更优的配对方式(比如排序后配对),不存在“贪心选择”的步骤。

如果你的目标是计算固定配对顺序下的总加班费,这个逻辑是合理的;但如果是要找最小总加班费,这段代码的逻辑是错误的,此时正确解法才是贪心算法。

内容的提问来源于stack exchange,提问作者Yousuf L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:30:43