Swift 数据结构与算法(46) + Leetcode217. 存在重复元素(哈希,集合)

93 阅读3分钟

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为键,商品数量和详情为值,这样当用户重复添加商品时,只需要更新商品数量。

  • 收藏功能:在新闻或媒体应用中,用户可以收藏文章或视频。需要确保用户不会重复收藏同一篇文章或同一个视频。

    技术应用:使用集合或数据库索引来检查和防止重复收藏。

总的来说,去重是编程和系统设计中的一个常见需求。选择合适的数据结构和算法可以大大提高系统的效率和用户体验。