算法(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
};
相关推荐
Ivanqhz2 分钟前
linearize:控制流图(CFG)转换为线性指令序列
开发语言·c++·后端·算法·rust
英俊潇洒美少年4 分钟前
Vue reactive 底层 Proxy 完整流程(依赖收集 + 触发更新)
前端·javascript·vue.js
2401_873204654 分钟前
基于C++的区块链实现
开发语言·c++·算法
周万宁.FoBJ4 分钟前
vue源码讲解之 effect解析 (仅包含在effect中使用reacitve情况)
前端·javascript·vue.js
Frostnova丶5 分钟前
LeetCode 3546. 等和矩阵分割
算法·leetcode·矩阵
Qlittleboy9 分钟前
<el-form @submit.native.prevent> elementUI的里面的input的元素的回车事件后总是自动提交表单
前端·javascript·elementui
Carsene10 分钟前
Docsify 文档缓存问题终极解决方案:拦截请求自动添加版本号
前端·javascript
周淳APP11 分钟前
【VDOM,Diff算法,生命周期,并发请求】
前端·javascript·vue.js
Linncharm11 分钟前
重写一个「年久失修」的开源项目:把 jQuery + CoffeeScript 的 3D 户型图工具迁移到 TypeScript + Three.js r181
前端
竹林81814 分钟前
从“后端验证”到“前端签名”:我在Web3项目中重构用户身份认证的实战记录
前端·javascript