首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不正确的样品溶液输出

不正确的样品溶液输出
EN

Stack Overflow用户
提问于 2022-07-16 23:35:12
回答 1查看 30关注 0票数 -1

我在做密码540。排序数组问题中的单个元素。

我在网上找到了答案。

这个答案可以在leetcode网站上成功提交。但是当我在编译器上运行这个程序时,它会输出一个8的答案。我应该得到的答案是2而不是8

我不太明白为什么这个程序的最后一部分是if (left == 0) return nums[0]

谁能告诉我原因吗?

代码语言:javascript
运行
复制
public class Main {
    public static void main(String[] args) {
        int[] n = {1,2,3,3,4,4,8,8};
        int ans = singleNonDuplicate(n);
        System.out.println(ans);
}

private static int singleNonDuplicate(int[] nums) {
    int left = 0;
    int right = nums.length - 1;

    while (left + 1 < right) {
        int mid = (left + right) / 2;
        int num = nums[mid];
        if (num != nums[mid - 1] && num != nums[mid + 1]) return num;

        if (mid % 2 == 0) {
            if (num == nums[mid - 1]) {
                right = mid;
            } else {
                left = mid;
            }
        } else {
            if (num == nums[mid - 1]) {
                left = mid;
            } else {
                right = mid;
            }
        }
    }

    if (left == 0) return nums[0];
    return nums[nums.length - 1];
}

}
EN

回答 1

Stack Overflow用户

发布于 2022-07-17 00:44:24

首先,如果不真正了解解决方案的作用,我就不会在网上搜索问题的解决方案。

但是,您遇到的问题是由于输入数组中有两个不重复的数字造成的。这两个从不重复的数字是'1‘和'2’。如果您查看您的程序,您会注意到,最后一个return语句返回数组的最后一个元素,在您的例子中,这个元素是数字'8‘。这就是为什么你要得到你不想要的返回值。

使用这个数组将允许您的'singleNonDuplicate(int[])‘方法返回数字'2’。

代码语言:javascript
运行
复制
int[] n = {1,1,2,3,3,4,4,8,8};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73008318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档