A题

2089. 找出数组排序后的目标下标

C++

STL的二分函数

  1. class Solution {
  2. public:
  3. vector<int> targetIndices(vector<int>& nums, int target) {
  4. vector<int> vec;
  5. sort(nums.begin(), nums.end());
  6. auto begin = lower_bound(nums.begin(), nums.end(), target);
  7. auto end = upper_bound(nums.begin(), nums.end(), target);
  8. if (begin == nums.end()) return vec;
  9. for (auto i = begin; i != end; ++ i) vec.push_back(i - nums.begin());
  10. return vec;
  11. }
  12. };

B题

2090. 半径为 k 的子数组平均值

C++

前缀和

class Solution {
public:
    vector<int> getAverages(vector<int>& nums, int k) {
        vector<long long> sums(nums.size() + 1);
        vector<int> ans(nums.size(), -1);
        if (nums.size() < 2 * k + 1)  return ans;
        for (auto i = 1; i <= nums.size(); ++ i)  sums[i] = sums[i - 1] + nums[i - 1];
        for (auto l = 0; l < nums.size() - 2 * k; ++ l) {
            auto r = l + (2 * k + 1) - 1;
            auto avg = (int)((sums[r + 1] - sums[l]) / (2 * k + 1));
            ans[l + k] = avg;
        }
        return ans;
    }
};

前缀和压行:

class Solution {
public:
    vector<int> getAverages(vector<int>& nums, int k) {
        vector<long long> sums(nums.size() + 1);
        vector<int> ans(nums.size(), -1);
        if (nums.size() < 2 * k + 1)  return ans;
        for (auto i = 1; i <= nums.size(); ++ i)  sums[i] = sums[i - 1] + nums[i - 1];
        for (auto l = 0; l < nums.size() - 2 * k; ++ l) 
            ans[l + k] = (int)((sums[l + 2 * k + 1] - sums[l]) / (2 * k + 1));
        return ans;
    }
};

C题

C++

STL的最值函数(没写完)

class Solution {
public:
    int minimumDeletions(vector<int>& nums) {
        if (nums.size() == 1)  return 1;
        int l = min_element(nums.begin(), nums.end())- nums.begin();
        int r = max_element(nums.begin(), nums.end()) - nums.begin();        
        if(l > r) swap(l,r);
        auto mid = nums.size() / 2;
        if (l < mid && r > mid + 1)  return l + 1 + nums.size() - r;
        else if (l < mid && r < mid)  return r + 1;
        // else (l >= mid && r >= mid)  return nums.size() * 2 - l - r;
        else  return nums.size() - l;
    }
};