LeetCode-697. Degree of an Array
来源:互联网 发布:intelij idea java web 编辑:程序博客网 时间:2024/06/06 02:37
Description:
Example 1:
Example 2:
Note:
Solution (C++):
算法分析:
其实仔细分析这道题,不难看出,如果真的去分析子序列,徒增烦恼。我们只要找到出现次数最多的那个数,还有它们的索引,然后找到它们索引中最小值与最大值,相减加一,就可以算出最小值索引与最大值索引之间的数的个数,这个就是我们要找到答案。如果相同的出现次数的数,那么就选择最短的那个,即可。
但对于我来说,问题的关键不在这,而在于,如果快速有效简便地找到这个序列中,出现次数最多的元素,并获得它们的索引呢?以我目前的认知,会采用桶排序。但是题目Note已经说了单个元素范围是0~49999,所以桶排序肯定不行。
那么参考优秀的别人的答案。可以用哈希表,Hash Table,来巧妙地解决这道题。这也确实反映了我,算法功底并不扎实。但这也正是我做题、写这些博客的目的—–通过不断的做题练习,来在实战中完成算法学习。所以,接下来,我会首先就这道题中的Hash Table的运用进行说明。然后,我会单独新开辟一个系列,系统的学习数据结构与算法。
这里用了两个哈希表,一个用来储存索引,一个用来计数。而两个哈希表共同的地方就是序列的元素值。那么,当储存了不同元素的索引,并得到了元素出现的次数之后,我们就能找到出现次数最多的元素,从而也能获得相同数值的其他元素的索引。
除此之外,还要注意到特殊情况,那就是某些特例,就跟数学中分类讨论一样,要考虑周全。在这道题中就是,如果序列的规模很小,序列长度只有一,就一个元素,那么我们直接返回1,就是符合题目要求的答案了。
程序分析:
首先要好好分析一下unordered_map这种数据结构。找到的目前觉得比较好的博客是:关联容器:unordered_map详细介绍。
unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value。不同的是unordered_map不会根据key的大小进行排序。总之简单来说,unordered_map的两个参数,前一个是key,后一个是value。可以通过key来搜索到value。
那么回到具体的程序来说,startIndex的key就是nums[i],元素的数值;value是i,元素的索引。正好跟原nums[]反过来了。而count的key同样是nums[i],而value是记录元素重复出现的次数。
之前一直以为要先遍历nums一遍之后,才能让再从头再查找一变count,从中找到最大值。其实,这也是我的一种常用惯性思维。其实解决问题要学会重一般性入手。那么对于一般的情况。如果count[nums[i]]的值就是fre,那么这就是我们要找到的对象。如果count[nums[i]]大于当前fre,就进行fre的更新。
- LeetCode 697. Degree of an Array
- leetcode-697. Degree of an Array
- 【LeetCode】697. Degree of an Array
- LeetCode-697. Degree of an Array
- leetCode-Degree of an Array
- 697. Degree of an Array
- 697. Degree of an Array
- 697. Degree of an Array
- 697. Degree of an Array
- 697. Degree of an Array
- leetcode 697. Degree of an Array数组的度
- LeetCode.697 Degree of an Array
- leetcode 697[easy]---Degree of an Array
- LWC 54:697. Degree of an Array
- 697 Degree of an Array
- Degree of an Array问题及解法
- LeetCode697. Degree of an Array解答
- LeetCode-697:Degree of an Array (度相同的最小子数组)
- AndroidStudio3.0使用过程中遇到的bug
- Spring boot中去掉URL后面的jsessionid
- c++对象成员的引用,对象的赋值,对象指针或对象引用
- MongoDB视频教程
- Ring3下的DLL注入工具
- LeetCode-697. Degree of an Array
- Angular 4 上传多个文件到Spring boot
- Axure实战案例——点击跳转页码
- HDU-3038-How Many Answers Are Wrong
- Angular调用redis实现输入框自动提示
- hostname变量和/etc/hosts文件
- 作业部落图片库
- Angular 下载zip文件并重命名文件
- git学习笔记