Swift 数据结构与算法( ) + Leetcode 掘金 #日新计划更文活动
题目
217. 存在重复元素
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
示例 1:
输入: nums = [1,2,3,1]
输出: true
示例 2:
输入: nums = [1,2,3,4]
输出: false
示例 3:
输入: nums = [1,1,1,3,3,4,3,2,4,2]
输出: true
提示:
1 <= nums.length <= 105-109 <= nums[i] <= 109
解题思路🙋🏻 ♀️
边界思考🤔
代码
解法 1
class Solution { func containsDuplicate(_ nums: [Int]) -> Bool {
if nums.count <= 1 { return false}
var dict = [Int:Int]()
for item in nums {
if let newN = dict[item] {
return true
} else {
dict[item] = 1
}
}
return false
}
}
解法 2
class Solution {
func containsDuplicate(_ nums: [Int]) -> Bool {
return nums.count > Set(nums).count //强转集合看看有没有 数组大 ,如果比数组小,就是有重复
}
}
时空复杂度分析
错误与反思
概念
使用场景与应用
1. 核心概念和实际应用场景:
核心概念: 数据去重和数据结构的选择
从这题中,可以看到两种不同的解决思路:使用哈希表(字典)去记录和检查重复数据;以及使用集合去除重复数据后和原数组进行长度对比。
实际应用场景:
-
数据库去重:在处理大量数据时,经常需要对数据进行去重操作,以确保数据的唯一性。
技术点:SQL 中的 DISTINCT 关键字,或使用哈希表(例如Redis)。
-
缓存设计:在系统设计中,为了减少对主数据库的查询,经常会使用缓存来存储频繁查询的数据。这时,需要一个机制来确保数据不被重复插入。
技术点:使用缓存系统如Memcached或Redis,并利用它们的数据结构(例如哈希表)进行去重。
-
身份验证:在用户注册或登录时,需要确保每个用户的标识(如电子邮件或用户名)是唯一的。
技术点:数据库索引、查找和哈希表。
2. iOS app 开发的实际使用场景:
-
好友推荐系统:在社交应用中,当推荐新的好友给用户时,需要确保推荐的好友不在用户的现有好友列表中。
技术应用:使用集合或哈希表来快速检查和过滤已有的好友。
-
购物车设计:在电商应用中,用户可能会多次点击购买按钮,但我们不希望同一个商品被重复添加到购物车中。
技术应用:利用哈希表,以商品ID为键,商品数量和详情为值,这样当用户重复添加商品时,只需要更新商品数量。
-
收藏功能:在新闻或媒体应用中,用户可以收藏文章或视频。需要确保用户不会重复收藏同一篇文章或同一个视频。
技术应用:使用集合或数据库索引来检查和防止重复收藏。
总的来说,去重是编程和系统设计中的一个常见需求。选择合适的数据结构和算法可以大大提高系统的效率和用户体验。