算法(TS):存在重复元素

给你一个整数数组 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

解法一

用一个 set 对象用来保存已经从 nums 中遍历得到的数据,遍历 nums 时判断 set 中是否存在它,是则说明 nums 中存在重复的值,这些返回 true,否则继续遍历,直到nums结束,返回 false

typescript 复制代码
function containsDuplicate(nums: number[]): boolean {
    const numSet = new Set<number>()
    let result = false
    for(let num of nums) {
        if (numSet.has(num)) {
            result = true
            break
        } else {
            numSet.add(num)
        }
    }

    return result
};

时间复杂度O(n),空间复杂度O(n)

解法二

先排序,再比较相邻元素是否相等

ini 复制代码
function containsDuplicate(nums: number[]): boolean {
    nums = nums.concat([])
    nums.sort((a,b) => a - b)
    let result = false
    let i = 0

    while(i < nums.length) {
        if (nums[i] === nums[i + 1]) {
            result = true
            break
        }
        i++
    }
    return result
};
相关推荐
hetao17338371 天前
2026-01-27~28 hetao1733837 的刷题记录
c++·笔记·算法
2301_822366351 天前
C++中的智能指针详解
开发语言·c++·算法
郑州光合科技余经理1 天前
同城配送调度系统实战:JAVA微服务
java·开发语言·前端·后端·微服务·中间件·php
一只小bit1 天前
Qt 绘图核心教程:从基础绘制到图像操作全解析
前端·c++·qt·gui
u0109272711 天前
C++中的模板方法模式
开发语言·c++·算法
乾元1 天前
绕过艺术:使用 GANs 对抗 Web 防火墙(WAF)
前端·网络·人工智能·深度学习·安全·架构
HWL56791 天前
一个CSS属性will-change: transform
前端·css
Y淑滢潇潇1 天前
WEB 作业 即时内容发布前端交互案例
前端·javascript·交互
比特森林探险记1 天前
后端开发者快速入门react
开发语言·前端·javascript
重生之我是Java开发战士1 天前
【优选算法】滑动窗口:长度最小的子数组,无重复字符的最长子串,最大连续1的个数,将x减到0的最小操作数,水果成篮,异位词,串联所有单词的子串,最小覆盖子串
算法