存在重复元素

154 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述

  • 给你一个整数数组 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 <= Math.pow(10,5)
    • -Math.pow(10,9) <= nums[i] <= Math.pow(10,9)

二、思路分析:

  • 这题就是很直白的看数组去重,所以是简单难度的,第一种,排序,遍历一次
    • 首先将给定的整数数组排序,升序倒序无所谓
    • 然后遍历数组,排序后的数组,如果有相同的项,肯定是前后相邻的,比较nums[i]nums[i+1]是否相等就可以,有相等的返回true,没有返回false
  • 然后第二种,不对数组排序,遍历两次
    • 第一层遍历,取出数组的项,第二层遍历依次取出,看是否有与第一次遍历取出的项相等,有则返回true,没有返回false

三、AC 代码:

  • 第一种
function containsDuplicate(nums: number[]): boolean {
    if(nums.length === 1) return false
    nums.sort((a, b) => {return a-b});
    for(let i = 0; i < nums.length - 1; i++){
        if(nums[i] === nums[i+1]){
            return true
        }
    }
    return false
};
  • 第二种
function containsDuplicate(nums: number[]): boolean {
    if(nums.length === 1) return false
    for(let i = 0; i < nums.length - 1; i++){
        for(let j = i + 1; j < nums.length; j++){ 
            if(nums[i] === nums[j]){
                return true
            }
        }
    }
    return false
};

四、总结:

  • 需要注意一下数组长度为1的特殊情况,这样是必不可能出现重复项的
  • 以上两种复杂度一般,可以去题解区看看其他大佬的解法。。。

image.png