算法Week02.01 - LeetCode 217. Contains Duplicate
来源:互联网 发布:淘宝如何开通公益宝贝 编辑:程序博客网 时间:2024/05/16 17:58
题目大意
判断给定数组是否存在重复的元素。
解题思路
题意非常直观,而且题目本身也是 Easy 的级别。不过如何尽可能地减小算法的复杂度呢?
显然算法的复杂度不可能低于 O(n),因为你在遍历所有元素之前永远也不能下“不存在重复元素”的结论。
解决这个问题的一个经典的 O(n) 算法是统计排序,统计排序是一种非基于比较的排序算法,它通过建立一个数组 int cnt[]
来统计待排序数组中数出现的次数, cnt[index]
表示下标 index
在待排序数组中出现的次数,这样只要将待排序数组遍历一遍就可以确定有序的序列了。
利用相同的思路,创建一个布尔数组 bool dup[] = { false };
,对于给定数组中的每一个元素 n
,判断 dup[n]
是否为 true
,如果是,则说明 n
重复出现;否则将 dup[n]
标记为 true
。
完整代码
class Solution {public: bool containsDuplicate(vector<int>& nums) { bool buckets[1000000] = { false }; for (int i = 0; i < nums.size(); i++) { if (buckets[nums[i]]) return true; else buckets[nums[i]] = true; } return false; }};
思考
虽然统计排序的时间效率很高,但很容易发现,它的空间开销是巨大的;如果这一题给出数组的最大值为 231 - 1,或者甚至是 long long
类型的数组,那么这种方法是开销巨大且不容易实现的,因而还有必要考虑更加普遍的方法。
目前的思路有两种:第一种是用常见的基于比较的排序算法先对数组进行排序;第二种则是使用哈希的方法将稀疏的数组映射到一个空间消耗可以接受的邻接表中。
0 0
- 算法Week02.01 - LeetCode 217. Contains Duplicate
- LeetCode 217. Contains Duplicate
- [leetcode] 217.Contains Duplicate
- 【leetcode】217. Contains Duplicate
- 【Leetcode】217. Contains Duplicate
- [LeetCode]217. Contains Duplicate
- 217. Contains Duplicate LeetCode
- LeetCode 217. Contains Duplicate
- [LeetCode]217. Contains Duplicate
- 【LeetCode】217. Contains Duplicate
- leetcode 217. Contains Duplicate
- leetcode 217. Contains Duplicate
- LeetCode *** 217. Contains Duplicate
- LeetCode 217. Contains Duplicate
- leetcode-217. Contains Duplicate
- LeetCode 217. Contains Duplicate
- 217.[Leetcode]Contains Duplicate
- LeetCode 217. Contains Duplicate
- Function(HDU5875)
- leetCode练习(2)
- threejs中坐标系转换和实现物体跟随鼠标移动
- 13章 人机猜拳游戏
- Android ContentResolver ContactsContract 获取手机联系人信息
- 算法Week02.01 - LeetCode 217. Contains Duplicate
- WEB前端性能测试优化指标
- php 中单例模式使用
- 基于netty-socketio的web推送服务
- linux中的文件权限和chmod命令的使用
- android 加固防止反编译-重新打包
- UI层自动化测试框架(五):业务层和用例层
- mapreduce调优一
- C#对象间的协作和信息交换(二)主窗体向从窗体传递消息