Existem elementos repetidos III (linha de barril)

Título
Dada uma matriz de números inteiros, determine se existem dois índices diferentes na matriz Eu Eu soma j j para que n em m s [ Eu ] nums [i] e n em m s [ j ] nums [j] O valor absoluto da diferença de é no máximo t t e Eu Eu soma j j O valor absoluto da diferença entre é no máximo ó ó .
Eu apenas pensei nisso s e t + eu o W e r _ b o em n d set + lower \ _bound , referem-se ao método oficial banheira de resolução de problemas, complexidade de tempo de O (N)

class Solution {
public:
	//注意考虑负数时处理,需要向下取整,保证每个桶大小都为m
	long long getpos(long long &num,long long &m) {
		return num<0 ? (num+1)/m-1 : num/m;
	}
    bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
        if(t < 0) return false;
        long long m = t+1LL;
		unordered_map<long long,long long> mp;
		int n = nums.size();
		for(int i = 0;i < n;++i) {
            long long num = nums[i];
			long long p = getpos(num,m);
			if(mp.find(p) != mp.end())
				return true;
			else if(mp.find(p-1) != mp.end() && abs(num-mp[p-1])<=t)
				return true;
			else if(mp.find(p+1) != mp.end() && abs(num-mp[p+1])<=t)
				return true;
			mp[p] = num;
			if(i >= k) {
                num = nums[i-k];
				mp.erase(mp.find(getpos(num,m)));
			}
		}
		return false;
    }
};
Publicado 152 artigos originais · ganhou elogios 2 · Vistas 6438

Acho que você gosta

Origin blog.csdn.net/weixin_43918473/article/details/105458211
Recomendado
Clasificación