ARTS打卡第9周

A:Longest Consecutive Sequence    Hard

题目:

Given an unsorted array of integers, find the length of the longest consecutive elements sequence.

Your algorithm should run in O(n) complexity.

解析:提供一个无序数组,查找出这个无序数组中的最长连续子数组,对应的算法的时间复杂度是O(n)

思路:

1.将无序数组进行排序,就变成了求解有序数组的最长连续子数组,当当前元素不等于上一元素时,判断两个元素是否连续,不连续则进行下一轮的判断,记录最大子串的长度,比较好实现

2.不进行数组的排序,先将数组的元素,写入到Set中,使用队列记录当前情况的,自定义一个类,记录数组上界,数组下界和数组长度,当前情况记录完毕之后,在Set中清除对应的元素,

记录最大的数组长度,当前情况不存在其他的上界或者下界时结束,如果Set中剩余的元素的个数小于或等于当前数组最大长度,结束,否则,在Set中拿出一个元素,进行处理,放入队列中。

方案:

排序的方案:https://leetcode.com/submissions/detail/229825921/

不排序的方案:https://leetcode.com/submissions/detail/229921693/

R:http://open.163.com/movie/2010/12/7/V/M6UTT5U0I_M6V2TBK7V.html,<< 线性时间排序>>,讲述了如何通过计数排序法来进行线性时间的排序,

以及通过计数排序法实现的基数排序法,在小规模的数据中,如果不考虑缓存的情况下,理论运行时间是线性的,小于nlgn,

实际使用中,对缓存要求很高,表现得比其他nlgn的算法要差,在特定的情况下,表现良好。

T&S:分享覃超老师关于算法学习的见解,分析了算法学习的初学者状态,以及学习的方法,通过系统的学习,实现算法水平的提高:

初学者状态:

1.基础薄弱,迷茫不懂、不知道如何下手

2.看懂算法和数据结构,但是不知道如何运用?

3.不注重思维体系、解法单一、不考虑不同解法的优缺点

 
三位一体练习法:
要点一:快速过所有算法知识点,串成知识体系,反复过遍数:遍数 > 每次时长,背诵、记忆、默写:算法模板
要点二:学以致用:马上开始做题!https://leetcode-cn.com,按照知识体系有组织、系统性地做题
要点三: 刷题要过遍数:遍数 > 每题时长, 五遍刷题法(遍数越多越好)
 

猜你喜欢

转载自www.cnblogs.com/wujunjie-Blog/p/10890875.html