将数组清空

发布时间 2023-04-30 14:38:01作者: 失控D大白兔

给你一个包含若干互不相同整数的数组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;   
    }
};