美文网首页
元素中有重复元素吗?(2)

元素中有重复元素吗?(2)

作者: 我才是臭吉吉 | 来源:发表于2019-02-22 11:49 被阅读0次

题目

给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。

  • 示例1:
输入: nums = [1,2,3,1], k = 3
输出: true
  • 示例2:
输入: nums = [1,0,1,1], k = 1
输出: true
  • 示例3:
输入: nums = [1,2,3,1,2,3], k = 2
输出: false

解法1:暴力法

双重遍历,依次比较查找,时间复杂度为O(n^2)。

BOOL checkTheSameNumberWithSpecificIndex1(NSArray<NSNumber *> *nums, NSInteger target) {
    if (nums.count <= 1) {
        return NO;
    }
    
    for (NSInteger i = 0; i < nums.count; i++) {
        // 当前数值
        NSInteger currentValue = [nums[i] integerValue];
        // 在依次查看之后的数据值是否相同
        for (NSInteger j = i + 1; j < nums.count; j++) {
            NSInteger nextValue = [nums[j] integerValue];
            if (currentValue == nextValue) {
                // 索引差是否符合要求
                if (labs(j - i) <= target) {
                    return YES;
                }
            }
        }
    }
    
    return NO;
}

解法2:哈希表

利用哈希表(OC中使用NSDictionary对象)的快速查找降低了复杂度,同时进行比较并更新。时间复杂度降低为O(n)。

BOOL checkTheSameNumberWithSpecificIndex2(NSArray<NSNumber *> *nums, NSInteger target) {
    if (nums.count <= 1) {
        return NO;
    }
    
    // 插入到哈希表中,同时检查:如果数值对应的key已经存在,则使用其索引与当前索引进行比较。符合要求则返回;不符合则插入新索引,继续向后检查
    NSMutableDictionary *hashTable = [[NSMutableDictionary alloc] initWithCapacity:10];
    
    for (NSInteger index = 0; index < nums.count; index++) {
        NSNumber *currentItem = nums[index];
        NSNumber *indexItem = hashTable[currentItem];
        if (!indexItem) {
            // 不存在,插入(key为数据值,value为索引)
            hashTable[currentItem] = @(index);
        } else {
            // 存在,取出value索引值,进行比较
            if(labs(indexItem.integerValue - index) <= target) {
                // 符合要求
                return YES;
            } else {
                // 不符合,更新此索引值
                hashTable[currentItem] = @(index);
            }
        }
    }
    
    return NO;
}

相关文章

  • 元素中有重复元素吗?(2)

    题目 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = n...

  • 2019-03-01 Day54待提高

    1.#### 重复 N 次的元素在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N ...

  • LeetCode 961. 重复 N 次的元素

    961. 重复 N 次的元素 在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次...

  • 961. 重复 N 次的元素

    在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次。返回重复了 N 次的那个元素...

  • 数组中有重复元素吗?

    题目 给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元...

  • 算法:重复N次的元素

    题目:在大小为2N的数组A中有N+1个不同的元素,其中有一个元素重复了N次。返回重复了N次的那个元素;(从题目中可...

  • 961. 重复 N 次的元素

    题目描述 在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次。返回重复了 N 次...

  • 重复 N 次的元素

    在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次。 返回重复了 N 次的那个元...

  • LeetCode 重复 N 次的元素

    在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次。 返回重复了 N 次的那个元...

  • python列表,字典排序使用小知识点

    将数字列表,转为字符串 列表中有重复元素的各种处理 1、找到一个列表中的重复元素 2、找到一个列表中的元素出现的次...

网友评论

      本文标题:元素中有重复元素吗?(2)

      本文链接:https://www.haomeiwen.com/subject/mznsyqtx.html