力扣1703.得到连续K个1的最少相邻交换次数

力扣1703.得到连续K个1的最少相邻交换次数

  • 中位数贪心 + 前缀和

    • 设pi = qi - i ,则问题变为所有pi到x的距离和的最小值

    • 同时x应取pi的中位数

    • 因此枚举i作为最左端的1,求最小值即可

    • 推出距离和公式:si + si+k - si+k/22 - pi+k/2(k%2)

cpp 复制代码
  class Solution {
  public:
      int minMoves(vector<int>& nums, int k) {
          vector<int> p;
          for(int i=0;i<nums.size();i++)
              if(nums[i])
                  p.push_back(i-p.size());
          int m = p.size(),s[m+1];
          s[0] = 0;
          for(int i=1;i<=m;i++)
              s[i] = s[i-1] + p[i-1];
          int ans = INT_MAX;
          for(int i=0;i<=m-k;i++)
              ans = min(ans,s[i] + s[i+k] - s[i+k/2]*2 - p[i+k/2]*(k%2));
          return ans;
      }
  };
相关推荐
To_OC42 分钟前
LC 49 字母异位词分组:想到哈希表很简单,选对 key 才是精髓
javascript·算法·leetcode
用户938515635076 小时前
从 O(n²) 到 O(nlogn):一文读懂快速排序的“快”与“妙”
javascript·算法
To_OC7 小时前
手写快排次次翻车?别死背快排模板了,这才是面试官想听的底层逻辑
javascript·算法·排序算法
饼干哥哥8 小时前
Reddit VOC调研太慢?搭一个AI专家团队半小时洞察任何品类|以猫用饮水机为例
人工智能·算法·ai编程
地平线开发者9 小时前
Transformer模型部署之性能优化指南
算法
地平线开发者9 小时前
人在途中:从“编译失败”到“模型可落地”——CUDA 自定义算子
算法·自动驾驶
半个落月12 小时前
从递归到快速排序:用 JavaScript 把分治思想讲明白
javascript·算法·面试
小月土星13 小时前
JavaScript 快速排序:从 pivot、双指针到分治思想
javascript·算法·面试
小月土星13 小时前
JavaScript 递归入门:从 1 到 n 求和,再到数组扁平化
javascript·算法·面试