排序数组去重

万事开头难,开始算法学习的第一步,反正也是给自己看的,所以没去博客园,csdn,无关名利,给自己记录一下学习过程。

回顾一下自己会什么。语言就会个python,数据库会mysql,mongodb,redis,会爬虫,框架会个scrpay。科班出身,那么我还了解软工知识,做需求分析分析,面向百度写报告还是会的,了解大数据方向的知识,会一点数据分析,常用算法都听说过,刚刚好找不到工作。爬虫这个岗位太难找了。

开始第一天的学习,从算法开始,首先找刷题网站,以前也刷过力扣,三五十道差不多,无所谓,号找不到了,在注册一个,百度一下什么是算法


算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度时间复杂度来衡量。


不清除,不明白,无所谓。点击LeetCode 探索,从最基础的开始,初级算法,开始再次入门。

数组

第一题, 从排序数组中删除重复项

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。


说一下有哪些问题,就会用个python,别的语言C还能写个hello world,java勉强能读一下


def removeDuplicates(self, nums: List[int]) -> int:

大致也能理解一下,定义了一个方法,传入一个参数,nums,应该是一个列表,由整形组成的。

刚开始就遇到问题,-> 什么意思,没见过啊。百度。明白了,无所谓,是个注释,->:标记返回函数注释。

开始思考,python中有数组这种东西吗,

回忆加百度,python共有六个基本数据类型,数字,字符串,列表,元组,集合,字典。

没找到数组,观察,基本二字,百度什么是数组,数组是用于储存多个相同类型数据的集合。

看一下题目,nums:LIst[int]。嗯,没什么问题。那就是列表去重。

最简单的方法,列表转集合再转列表,

nums = list(set(nums))

利用集合的互异性,出现问题,集合还有无序性。要求保持顺序。

方法二,创建一个空列表,对nums遍历,不在空列表的放入,得到一个有序的新列表

a = []

for i in nums:

    if i not in a:

        a.append(i)

直接写代码是有点费劲啊,以后截图吧,理论上没问题,但是没审题,原地删除重复的元素,不能建立新的空列表。

方法三,遍历,匹配


不出意外的报错了,对列表遍历时改变了列表的长度, list index out of range列表索引超出范围,len(a)的大小变化了。

改BUG吧,

没改明白。

找了一下午,没找到,发现一个排序方法

sorted(set(nums),key=nums.index)


日了狗了,编译器能好使提交就完犊子???????????


读题读题读题!!!!啊啊啊!

不要拷贝!!!虽然没明白是什么原理,但是读题啊,不要做任何拷贝

至少列表变成集合肯定是有新对象建立。




这道题还有一个坑,结果要返回数组长度,??????什么鬼东西,

也是set方法将数组转化为集合,利用集合无序性,sorted方法添加参数key=nums.index,依照原来的顺序排序。

读题,有序数组,那么重复元素扎堆聚集在一起,i与i+1对比就行

正常操作一个有序数组去除,我和下一个不重复,那么我就是不重复的。


首先定义一个i为0,while循环,为什么i必须小于len(nums)-1,防止数组越界,如果不减1,判断下一个时最后一个nums【i+1】越界。

如果我等于下一个,那么我能力,否则我就是下一个。

还可以,反正弄出来了,但是这个只能用于有序,无序不行,上面的集合排序好使没毛病。

写个这个真费劲,继续吧。这头开的不咋地啊。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容