LC.1738. 找出第 K 大的异或坐标值
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LC.1738. 找出第 K 大的异或坐标值相关的知识,希望对你有一定的参考价值。
LC.1738. 找出第 K 大的异或坐标值
维护二维区前缀和地推即可。
至于找第 k k k大,排序搞,或者利用快速选择算法。
S T L STL STL自带了一个 n t h _ e l e m e n t ( f i r s t , p o s , e n d ) nth\\_element(first,pos,end) nth_element(first,pos,end)
该算法复杂度是 O ( n ) O(n) O(n)的,最坏是 O ( n 2 ) O(n^2) O(n2)
所以基于该算法的总时间复杂度: O ( m n ) O(mn) O(mn)
code(快速选择)
class Solution {
public:
int kthLargestValue(vector<vector<int>>& a, int k) {
int n=a.size(),m=a[0].size();
vector<vector<int> >b(n,vector<int>(m,0));
vector<int>ans;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
int x=a[i][j];
if(i-1>=0) x^=b[i-1][j];
if(j-1>=0) x^=b[i][j-1];
if(i>=1&&j>=1) x^=b[i-1][j-1];
b[i][j]=x;
ans.push_back(x);
}
nth_element(ans.begin(),ans.begin()+k-1,ans.end(),greater<int>());
return ans[k-1];
}
};
本题的思想就是 异或运算和相加运算 都具有前缀和性质。
以上是关于LC.1738. 找出第 K 大的异或坐标值的主要内容,如果未能解决你的问题,请参考以下文章