给你一个包含若干互不相同整数的数组nums,你需要执行以下操作直到数组为空 :
- 如果数组中第一个元素是当前数组中的最小值则删除它
- 否则,将第一个元素移动到数组的末尾
请你返回需要多少个操作使nums为空
1. 逆向思维
class Solution {
public:
long long countOperationsToEmptyArray(vector<int>& nums) {
map<int, int> m;
for(int i = 0; i < nums.size(); i++)
m[nums[i]] = i;//记录值对应下标
int N = 1;//最后一个元素只用一次
long long res = 0;
auto it = m.begin();//最小值
res = res + N;
int index = it->second;//记录之前位置
it++;
while(it != m.end()){//从小到大遍历所有数
if(it->second<index)//比之前坐标小,被换到后面
N++;//每换一次位置,倒数元素就要多操作一次
res = res + N;
index = it->second;
it++;
}
return res;
}
};
标签:nums,int,res,long,++,数组,清空
From: https://www.cnblogs.com/929code/p/17365254.html