每日leetcode:找出数组中的重复数据

首先想到的方法就是使用哈希表来记录每个数字出现的次数。但是这种方法需要额外空间。在访问它之前将下标为|x|-1上的数字取相反数。

十载的矿区网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整矿区建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“矿区网站设计”,“矿区网站推广”以来,每个客户项目都认真落实执行。

近来,我一直在刷leetcode,发现这个平台真是一个好东西。它不仅可以帮助我们提高算法水平,而且还能锻鍊我们的耐心和毅力。

今天要介绍的题目是“442. 数组中重复的数据”。这道题目给定了一个整数数组nums,其中有些元素出现两次而其他元素只出现一次。找到所有在nums中出现两次的元素。

首先想到的方法就是使用哈希表来记录每个数字出现的次数。但是这种方法需要额外空间,并且时间复杂度为O(n)。如果要达到更优秀的解决方案,则需要考虑原地修改数组。

那么如何原地修改呢?其实很简单,对于任意一个数字x,在访问它之前将下标为|x|-1上的数字取相反数。如果已经访问过该数字,则此时|x|必然小于等于n(n为数组长度),因此我们可以根据abs(nums[i])-1是否小于n来判断nums[abs(nums[i])-1]是否已经被访问过。

具体实现见代码:

```python

class Solution:def findDuplicates(self, nums: List[int]) -> List[int]:

res = []

for i in range(len(nums)):

if nums[abs(nums[i])-1]< 0:

res.append(abs(nums[i]))

else:

nums[abs(nums[i])-1] *= -1

return res

```

这里需要注意的是,我们要返回的是出现两次的元素,而不是重复元素。因此如果一个数字已经被访问过了,则它在数组中一定出现了两次。

本文名称:每日leetcode:找出数组中的重复数据
网页路径:http://www.shufengxianlan.com/qtweb/news7/81757.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联