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

数组最大元素需为其他元素至少两倍的Java代码排障求助

问题分析与代码修正

问题描述

需求:编写代码判断数组中的最大元素是否是其他所有元素的至少两倍,若满足条件则输出该最大元素的0-based索引,否则输出-1。

原代码

import java.io.*;
import java.util.*;

public class Solution {

    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int [] x = new int [n];
        for(int i=0;i<n;i++){
            x[i]=sc.nextInt();
        }
        
        
        int max=Integer.MIN_VALUE;
        int count=0;
        int i;
        for(i=0;i<n;i++){
            if(max<x[i]){
                max=x[i];
                count=0;
            }
            if(max==x[i]){
                count++;
            }
        }
        if(count>=2){
            System.out.print(i);
        }
        else{
            System.out.print("-1");
        }
    }
}

原代码存在的问题

  • 核心逻辑缺失:完全没有实现「最大元素是其他元素至少两倍」的判断,仅统计了最大元素的出现次数,和需求完全不符
  • 索引输出错误:循环结束后i的值是数组长度n,并非最大元素的索引,输出结果完全错误
  • 边界情况未处理:当数组长度为1时,没有其他元素,按需求应返回0,但原代码会返回-1

修正后的代码

import java.io.*;
import java.util.*;

public class Solution {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] x = new int[n];
        
        for (int i = 0; i < n; i++) {
            x[i] = sc.nextInt();
        }
        
        // 处理数组长度为1的特殊情况
        if (n == 1) {
            System.out.println(0);
            return;
        }
        
        // 第一步:找到最大值及其索引
        int max = x[0];
        int maxIndex = 0;
        for (int i = 1; i < n; i++) {
            if (x[i] > max) {
                max = x[i];
                maxIndex = i;
            }
        }
        
        // 第二步:检查最大值是否是其他所有元素的至少两倍
        boolean isTwice = true;
        for (int num : x) {
            // 跳过最大值本身
            if (num == max) {
                continue;
            }
            // 如果存在元素的两倍大于最大值,直接不符合条件
            if (num * 2 > max) {
                isTwice = false;
                break;
            }
        }
        
        // 根据判断结果输出
        System.out.println(isTwice ? maxIndex : -1);
    }
}

代码说明

  1. 特殊情况处理:数组长度为1时,直接返回索引0,因为没有其他元素,天然满足条件
  2. 找最大值与索引:遍历数组一次,记录下最大值和它的第一个出现位置(如果有多个最大值,只要有一个不满足条件就返回-1,所以取第一个索引即可)
  3. 条件验证:再次遍历数组,对每个非最大值元素检查max >= num * 2,只要有一个元素不满足,就标记为不符合条件
  4. 结果输出:根据验证结果输出对应的索引或-1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:27:45