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()--返回一个用于比较元素间的值的函数

  • 相关阅读:
    CSU 1333 Funny Car Racing
    FZU 2195 检查站点
    FZU 2193 So Hard
    ZOJ 1655 FZU 1125 Transport Goods
    zoj 2750 Idiomatic Phrases Game
    hdu 1874 畅通工程续
    hdu 2489 Minimal Ratio Tree
    hdu 3398 String
    洛谷 P2158 [SDOI2008]仪仗队 解题报告
    POJ 1958 Strange Towers of Hanoi 解题报告
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602376.html
Copyright © 2011-2022 走看看