zoukankan      html  css  js  c++  java
  • 查找表类算法//存在重复元素 III

    给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ

    示例 1:

    输入: nums = [1,2,3,1], k = 3, t = 0
    输出: true

    示例 2:

    输入: nums = [1,0,1,1], k = 1, t = 2
    输出: true

    示例 3:

    输入: nums = [1,5,9,1,5,9], k = 2, t = 3
    输出: false
    
    class Solution {
    public:
        bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
            set<long> ss;
            long It = t;
            for(int i = 0; i < nums.size(); i++){
                if(i > k) ss.erase(nums[i-k-1]);
                set<long>::iterator it = ss.lower_bound(nums[i]-It);
                if(it != ss.end()&&(*it)-nums[i]<=It) return true;
                ss.insert(nums[i]);
            }
            return false;
        }
    };

    C++中set的用法

    set的特性是,所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set不允许两个元素有相同的键值。

    set的各成员函数列表如下:

    1. begin()--返回指向第一个元素的迭代器

    2. clear()--清除所有元素

    3. count()--返回某个值元素的个数

    4. empty()--如果集合为空,返回true

    5. end()--返回指向最后一个元素的迭代器

    6. equal_range()--返回集合中与给定值相等的上下限的两个迭代器

    7. erase()--删除集合中的元素

    8. find()--返回一个指向被查找到元素的迭代器

    9. get_allocator()--返回集合的分配器

    10. insert()--在集合中插入元素

    11. lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器

    12. key_comp()--返回一个用于元素间值比较的函数

    13. max_size()--返回集合能容纳的元素的最大限值

    14. rbegin()--返回指向集合中最后一个元素的反向迭代器

    15. rend()--返回指向集合中第一个元素的反向迭代器

    16. size()--集合中元素的数目

    17. swap()--交换两个集合变量

    18. upper_bound()--返回大于某个值元素的迭代器

    19. value_comp()--返回一个用于比较元素间的值的函数

  • 相关阅读:
    C++格式化输入输出
    算法的时间复杂度和空间复杂度
    C++编程中const和#define的区别
    C#中结构体和类的区别
    SQL之删除触发器
    Windows添加和取消右键管理员权限
    SQL之trigger(触发器)
    SQL VIEW(视图)
    二分查找的实现
    C++中this指针
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602374.html
Copyright © 2011-2022 走看看