优秀的编程知识分享平台

网站首页 > 技术文章 正文

LeetCode基础算法题第86篇:求有序数组的平方再排序

nanyue 2024-08-19 19:12:54 技术文章 7 ℃

技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。

目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。

初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式聊到大数据框架,从大数据聊到人工智能,... ...。

如果有任何问题可以在文章后评论或者私信给我

我会持续分享下去,敬请您的关注。

LeetCode 217. 存在重复元素(Contains Duplicate)

问题描述:

给定一个整数数组,判断是否存在重复元素。

如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。

示例:

C语言实现:

数组的值没有给定范围,也就是取值范围是整个32位整数。

所以我没有特别好的解题方法,能想到的方法有两种,一种是先对数组进行排序,然后遍历查看是否存在相邻的两个数相等的情况,如果存说明有重复的数存在,返回true,否则返回false。

第二种方法是构造一个hash表,通过查表来确定是否存在重复元素。

对于C语言来说,第一种方法实现起来比较简单,算法复杂度是O(nlogn),可以接受。

代码如下:

python语言的实现:

对于python来说,我们可以将通过nums生成一个集合,这是一个去重的操作,然后比较集合的长度是否和原列表的长度相等,如果相等说明没有重复的元素,否则说明有重复的元素。

代码如下:

Java语言的实现:

Java的实现我们用的是方法二来实现的,即构造一个哈希表,通过查表来确定是否存在重复的元素。

代码如下:

最后这道题我发现两个问题:

第一:

Test cases的覆盖率很低,低到类似[3,2,3,1]这样的case都没有。导致一些明显是错误的代码也通过了。比如下面这个:

第二:

抄袭现象很明显。上面这个错误的代码居然多次看到,说明很多人想都没想就复制黏贴了,有的只是稍微的格式化了一下。

如果刷题就是简单的抄袭,而不是去试图理解,那么刷题就变得一点意义都没有,就算面试面到了这道题,你依然不会。

Tags:

最近发表
标签列表