菜鸡又来问 leetcode 题目了

2019-01-03 22:38:35 +08:00
 lqw3030

请教大家个问题 这题:

这个是排行前几的解法



public boolean containsDuplicate(int[] nums) {
        for (int i = 1; i < nums.length; i++) {
                    for (int j = i - 1; j >= 0; j--) {
                        if (nums[i] > nums[j]) {
                            break;
                        } else if (nums[i] == nums[j]) {
                            return true;
                        }
                    }

                }
                return false;
    }

有没有朋友给我讲解下这么写的思路,这种解法如果输入

int[] nums = {88, 9, 88, 1, 88, 5, 88, 3, 88 };

不是返回的就不正确了吗?还是我没理解题目

12401 次点击
所在节点    LeetCode
29 条回复
renyijiu
2019-01-04 08:54:25 +08:00
感觉这个解法是数组排序了,自己想法空间换时间,用 hash 存值判断存在
bestkayle
2019-01-04 09:50:06 +08:00
试了下用 go 字典插入判断耗时 28ms
ColinWang
2019-01-04 10:29:50 +08:00
位图法,O(n)的时间复杂度
Biwood
2019-01-04 12:00:21 +08:00
@WildCat PC 版搜狗输入法,输入“ pingfang ”就有二次方的上标了
MisakaTang
2019-01-04 12:24:06 +08:00
就是测试用例太弱被卡过去了,不加 break 是 LTE 但是那组数据是顺序的,加了这个 break 卡掉了这组数据,应该是这样
SingeeKing
2019-01-04 19:50:33 +08:00
@ingin #20 哪里错了。。。
ingin
2019-01-05 00:41:51 +08:00
@SingeeKing ==换成!=
SingeeKing
2019-01-05 01:08:49 +08:00
@ingin #27 额。。这就尴尬了
Tidycc
2019-01-09 16:08:43 +08:00
不是很懂那个 `nums[i] > nums[j]` 的用法,又不是有序数组。感觉还是使用 HashSet,看长度是否变短。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/523645

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX