intmajorityElement(vector<int>&nums){int len =nums.size(); unordered_map<int,int> imap;for(int num : nums){imap[num]++;if(imap[num]> len /2)return num;}return0;}
intmajorityElement(std::vector<int>&nums){int votes =0;int num =nums[0];for(int i =1; i <nums.size();++i){ votes =nums[i]!= num ? votes -1: votes +1;if(votes <0){ num =nums[i]; votes =0;}}return num;}
vector<int> subSort(vector<int>& array) {
vector<int> tmp = array;
sort(tmp.begin(), tmp.end());
int left = -1, right = -1;
for(int i = 0; i < array.size(); i++){
if(tmp[i] != array[i]){
if(left == -1)
left = i;
right = i;
}
}
return vector<int>{left, right};
}
vector<int> subSort(vector<int>& array) {
int left = -1, right = -1;
int max_val = INT_MIN;
int min_val = INT_MAX;
int len = array.size();
for(int i = 0; i < len; i++){
if(array[i] < max_val){
right = i;
}else{
max_val = max(max_val, array[i]);
}
if(array[len - i - 1] > min_val){
left = len - i - 1;
}else{
min_val = min(min_val, array[len - i - 1]);
}
}
return vector<int>{left, right};
}
int findMin(std::vector<int> &arr){
int left = 0, right = arr.size();
while(left < right){
int tmp = arr[left];
if(tmp == left + 1){
left++;
}else if(tmp < left + 1 || tmp > right || arr[tmp - 1] == tmp){
right--;
arr[left] = arr[right];
}else{
swap(arr[left], arr[tmp - 1]);
}
}
return left + 1;
}
int findMin(std::vector<std::vector<int> > &arr){
int rlen = arr.size();
int clen = arr[0].size();
int left = 0, right = rlen * clen;
while(left < right){
int tmp = arr[left / clen][left % clen];
if(tmp == left + 1){
left++;
}else if(tmp < left + 1 || tmp > right ||
arr[(tmp - 1) / clen][(tmp - 1) % clen] == tmp){
right--;
arr[left / clen][left % clen] = arr[right / clen][right % clen];
}else{
swap(arr[left / clen][left % clen],
arr[(tmp - 1) / clen][(tmp - 1) % clen]);
}
}
return left + 1;
}
int maxSumDivSeven(vector<int>& nums, int k) {
vector<int> dp(k, INT_MIN);
dp[0] = 0;
for (auto a : nums) {
vector<int>dpNext(k, 0);
int mod = a % k;
for (int i = 0; i < k; ++i) {
dpNext[i] = max(dp[i], dp[(k + i - mod) % k] + a);
}
dp = dpNext;
}
return dp[0];
}
vector<int> slashOrder(vector<vector<int> > &matrix) {
int cols = matrix[0].size();
int rows = matrix.size();
vector<int> result;
for (int l = 0; l < cols + rows - 1; l++) {
int sum = l;
for (int i = 0; i < rows; i++) {
int j = sum - i;
if (i >= 0 && i < rows && j >= 0 && j < cols) {
result.push_back(matrix[i][j]);
}
}
}
return result;
}
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for(int i = 0; i < n / 2; ++i){
int count = n - i * 2;
for(int j = i; j < i + count - 1; ++j){
// 每次旋转四个
int tmp = matrix[i][j];
matrix[i][j] = matrix[n - 1 - j][i];
matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 -j];
matrix[n - 1 - i][n - 1 -j] = matrix[j][n - 1 - i];
matrix[j][n - 1 - i] = tmp;
}
}
}