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

Codingbat notAlone题解bug修复及Stream API实现咨询

notAlone 题目说明

题目规则如下:

我们定义:若数组中的某元素同时存在前置、后置相邻元素,且两侧相邻元素的值均与该元素不同,则称该元素处于**"alone"状态。
请返回处理后的数组:所有值等于给定val、且处于alone状态的元素,都需要替换为其左右相邻元素中的
较大值**。

官方示例输入输出:

  • notAlone([1, 2, 3], 2) → [1, 3, 3]
  • notAlone([1, 2, 3, 2, 5, 2], 2) → [1, 3, 3, 5, 5, 2]
  • notAlone([3, 4], 3) → [3, 4]

问题1:原有代码的缺陷与修复方案

核心问题

原有代码的逻辑遗漏了alone状态的必要判断条件:只有当值为val的元素,左右相邻元素都和自身值不相等时,才需要替换。原代码只要遍历到非首尾位置、值等于val的元素,就直接替换为左右邻居的最大值,没有校验邻居是否和当前元素值相等,会错误替换不满足alone条件的val元素。
举个典型错误场景:输入[1,2,2,3]、val=2,索引2位置的2左侧相邻值也是2,不满足alone状态,应该保留原值2,但原代码会将其替换为max(2,3)=3,输出错误结果[1,2,3,3]。
除此之外原代码存在冗余:声明了largestNeighbour变量但从未使用,不影响运行结果但属于无效代码。

修复后代码

public int[] notAlone(int[] nums, int val) {
    int[] res = new int[nums.length];
    // 空数组直接返回
    if (nums.length == 0) return res;
    // 首尾元素不可能满足alone条件,直接赋值
    res[0] = nums[0];
    res[res.length - 1] = nums[nums.length - 1];

    for (int i = 1; i < res.length - 1; i++) {
        if (nums[i] != val) {
            // 非目标值直接保留
            res[i] = nums[i];
        } else {
            // 目标值需校验是否满足alone条件
            if (nums[i-1] != val && nums[i+1] != val) {
                res[i] = Math.max(nums[i-1], nums[i+1]);
            } else {
                res[i] = nums[i];
            }
        }
    }
    return res;
}

问题2:Stream API 实现方案

可以通过Stream API基于索引遍历实现,逻辑和循环写法完全一致,不存在相邻元素访问的障碍,代码如下:

import java.util.stream.IntStream;

public int[] notAlone(int[] nums, int val) {
    return IntStream.range(0, nums.length)
            .map(i -> {
                // 首尾元素直接返回原值
                if (i == 0 || i == nums.length - 1) {
                    return nums[i];
                }
                // 非目标值直接返回
                if (nums[i] != val) {
                    return nums[i];
                }
                // 满足alone条件才替换为邻居最大值
                if (nums[i-1] != val && nums[i+1] != val) {
                    return Math.max(nums[i-1], nums[i+1]);
                }
                // 其余情况保留原值
                return nums[i];
            })
            .toArray();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:03:33