zoukankan      html  css  js  c++  java
  • Contains Duplicate III

    Given an array of integers, find out whether there are two distinct indices i and j in the array such that the difference between nums[i] and nums[j] is at most t and the difference between i and j is at most k.

     1 class Solution {
     2 public:
     3     bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
     4         multiset <long long> bst;
     5         for(int i=0;i<nums.size();i++)
     6         {
     7             if(bst.size()==k+1) bst.erase(bst.find(nums[i-k-1]));
     8             auto lb=bst.lower_bound(nums[i]);
     9             if(lb!=bst.end()&&abs(*lb-nums[i])<=t) return true;
    10             auto ub=bst.upper_bound(nums[i]);
    11             if(ub!=bst.begin()&&abs(*(--ub)-nums[i])<=t) return true;
    12             bst.insert(nums[i]);
    13         }
    14         return false;
    15     }
    16 };

    lower_bound 返回大于等于n的最小键值的序号。

    upper_bound 返回小于n的最大键值的序号+1.

    返回的位置均为可直接插入的位置。

  • 相关阅读:
    mtu
    OC2_使用系统协议
    OC1_协议语句
    Json文件/网址解析
    文件归档
    Plist文件
    NS-Date/NSDateFormatter
    OC10_文件练习
    OC9_文件操作
    OC8_NSData
  • 原文地址:https://www.cnblogs.com/zl1991/p/4682169.html
Copyright © 2011-2022 走看看