leetcode(五)Duplicate I、Duplicate II、Duplicate III

1.基础篇

题目地址:https://leetcode.com/problems/contains-duplicate/description/

题目描述:判断一个数组中是否有相同的元素,如果有则输出true,否则输出False

解决方法:


性能分析:


评价:这是一个比较机智的解法,先做排序,然后再比较相邻的元素值是否相等,就能输出正确的结果。整个算法的时间复杂度为O(n*logn),空间复杂度为O(1)。需要注意的是 for (int i=0; i<nums.size()-1; ++i)这句中,不能修改为for(int i=0;i<nums.size();i++),这样的写法忽略了i=1 的情况,也可在之前做判断后再写成for(int i=0;i<nums.size();i++)。

参考博客地址:https://blog.csdn.net/ajiangfan/article/details/52620648

2.提高篇

题目地址:https://leetcode.com/problems/contains-duplicate-ii/description/

题目描述:如果数组中相等的元素,且相等的元素的下标之差不能大于K,则返回true,否则false

两重循环报错:


参考大佬解法:

class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        unordered_map<int, int> m;
        for (int i = 0; i < nums.size(); ++i) {
            if (m.find(nums[i]) != m.end() && i - m[nums[i]] <= k) return true;
            else m[nums[i]] = i;
        }
        return false;
    }
};

算法性能:


分析:首先需要一个哈希表,来记录每个数字和其坐标的映射,然后判断当有相同元素且相邻元素的下标差小于k,输出true,否则输出true,整个算法的时间复杂度为O(n),空间复杂度为O(n)。

参考链接:https://www.cnblogs.com/grandyang/p/4539680.html

3.再提高篇

题目地址:https://leetcode.com/problems/contains-duplicate-iii/description/

题目描述:给定一个数组任意两个下标差小于k的两个元素值小于t

解决方法:

if(nums.size() < 2) return false;
         vector<pair<long, int>> value;
         for (int i = 0; i < nums.size(); ++i)
            value.push_back(pair<long, int>(nums[i], i));
         sort(value.begin(), value.end());
         for (int i = nums.size() - 1; i >= 1; --i)
         {
             for (int j = i - 1; j >= 0; --j)
             {
                 if (value[i].first - value[j].first > t) break;
                 else if (abs(value[i].second - value[j].second) <= k) return true;
                 else continue;
             }
         }
         return false;
算法性能:
分析:这段算法思路是: 维护一个大小为 k 的二叉搜索树 BST ,遍历数组中的元素,在 BST 上搜索有没有符合条件的数对,若存在则直接返回true,否则将当前元素数对插入 BST ,并更新这个 BST (若此时 BST 的大小已为k,需要删掉一个值)。保证 BST 的大小小于或等于为 k ,是为了保证里面的数下标差值一定符合条件: | i - j | <= k 。实现时,可使用 mulitset 来实现 BST

参考链接:https://blog.csdn.net/liyuefeilong/article/details/50750299


猜你喜欢

转载自blog.csdn.net/weixin_38368941/article/details/80014838