leetcode 2448
leetcode 2448. 使数组相等的最小开销
本题传送门
不会此题请可以先做做: 462. 最小操作次数使数组元素相等 II
下面先来讲讲462. 最小操作次数使数组元素相等 II
题意
给你一个长度为 n 的整数数组 nums ,返回使所有数组元素相等需要的最小操作数。
在一次操作中,你可以使数组中的一个元素加 1 或者减 1 。
题解
把nums数组中的每一个元素对应到数轴上,那么本题就可以理解成在数轴上找一个点使得各个点到他的距离总和最小。可以证明答案不在最小值的左边,也不在最大值的右边(假设答案在这些地方,我们可以在最小值和最大值之间任意找到一个点的总操作步骤比它更小)。于是我们可以让nums数组中的元素两两配对(假定nums数组长度是n,把 (nums0, numsn-1), (nums1, numsn-2),……由于第i个区间是第i-1个区间的子集,只要最后一个区间的答案最小 ,即满足整体最小。问题就变成了求中位数。
class Solution {
public:int minMoves2(vector<int>& nums) {sort(nums.begin(), nums.end());int n = (nums.size()+1)/2 - 1, ans = 0;for(int i = 0; i < nums.size(); i++){ans += abs(nums[i]-nums[n]);}return ans;}
};
题意
给你两个下标从 0 开始的数组 nums 和 cost ,分别包含 n 个 正 整数。
你可以执行下面操作 任意 次:
将 nums 中 任意 元素增加或者减小 1 。
对第 i 个元素执行一次操作的开销是 cost[i] 。
请你返回使 nums 中所有元素 相等 的 最少 总开销。
题解
根据上一题我们可以把cost[i]理解成每个nums[i]都有cost[i]个,这样问题就又转化成了中位数问题.假设最终把nums数组里的数都变成x,那么x一定在nums[i]中产生。只需枚举每一个nums[i]即可。
首先考虑所有元素都等于nums[0]的总代价total,并累加cost的和sumcost;
然后想使所有元素都变成nums[1],nums[2]……的total的变化量;
- 有cost[0]这么多数要增加nums[1]-nums[0]
- 有sumcost - cost[0]这么多数要减少nums[1]-nums[0];
因此 total += (2sum - sumcost)(nums[i]-nums[i-1]);
代码
typedef long long ll;
typedef pair<int, int> PII;
class Solution {
public:long long minCost(vector<int>& nums, vector<int>& cost) {vector<PII> res;for(int i = 0; i < nums.size(); i++){res.push_back({nums[i], i});}sort(res.begin(), res.end());ll total = 0, scost = 0;for(int i = 0; i < res.size(); i++){total += ll(res[i].first-res[0].first)*cost[res[i].second];scost += cost[i];}ll sum = cost[res[0].second], ans = total;for(int i = 1; i < res.size(); i++){int d = res[i].first - res[i-1].first;total += ll(2*sum - scost)*d;ans = min(ans, total);sum += (ll)cost[res[i].second];}return ans;}
};
leetcode 2448相关推荐
- leetcode:2448. 使数组相等的最小开销【猜结论落在给定点 + 考虑初始值和变化量 + 三分法模板学习】
目录 题目截图 题目分析 第一版丑陋了考虑所有[minn, maxn]变化量 第二版优雅只考虑给定点(猜结论) 三分法学习 总结 题目截图 题目分析 由于暴力是平方不行 这种题目可以考虑变化量,从最小 ...
- [LeetCode]135.Candy
[题目] There are N children standing in a line. Each child is assigned a rating value. You are giving ...
- 【LeetCode】(55)Jump Game(Medium)
题目 Jump Game Total Accepted: 52275 Total Submissions: 194395My Submissions Question Solution Given ...
- LeetCode之Candy
[题目] There areNchildren standing in a line. Each child is assigned a rating value. You are giving ca ...
- leetcode 5. Longest Palindromic Substring 字符串中的最长回文数 逐步从O(n^2)优化至线性时间
题目 解析 思路一 暴力解法 思路二 指针+最大长度 思路3 由中间至两边找回数 思路4 Manacher's algorithm 线性时间 参考文档 题目 链接 给定一个字符串 s,找到 s 中最长 ...
- LeetCode 10. Regular Expression Matching python特性、动态规划、递归
前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...
- leetcode Longest Substring with At Most Two Distinct Characters 滑动窗口法
题目解析 代码如下 题目解析 这一题是一道会员的题目,题目介绍如下: Given a string, find the length of the longest substring T that c ...
- leetcode 3. Longest Substring Without Repeating Characters 最长非重复子串的长度 滑动窗口法
题目链接 根据我们之前介绍的滑动窗口法的解法: 滑动窗口法详解 leetcode 438. Find All Anagrams in a String 滑动窗口法 这题,我们不难解决,使用之前的模板. ...
- leetcode:2680 Remove Duplicates from Sorted Array 删除数组中的重复元素
leetcode:26 对数组元素进行去重,使得原数组重复元素最多保留1个 限制: 我们不可以额外分配数组,必须保持空间复杂度为O(1) 这个并不难实现: class Solution(object) ...
最新文章
- 您的连接不是私密连接
- Oracle中的事务之savepoint
- HDU 1253 胜利大逃亡 题解
- RBM/DBN训练中的explaining away概念
- 2.10 stack
- 好云推荐官丨飞天加速之星怎样选择云服务器ECS?
- java性能优化方案_Java性能优化要点
- linux命令——init 的使用用法
- 一些比较好的慕课和教材的老师的对应关系(更新中~)
- python毕业设计作品基于django框架 电影院购票选座系统毕设成品(5)任务书
- 2022年二级建造师《建设工程法规及相关知识》试题答案
- 南通大学计算机专业校区,南通大学计算机科学与技术专业
- kali启动时出现resuming from hibernation错误
- springboot实现邮箱验证
- 自制低成本3D激光扫描测距仪(3D激光雷达),第二部分
- 如何轻松安装 Debian Linux 系统
- 实时语音通讯的回音消除技术详解
- 小程序登录授权code
- HomeKit、米家、智汀智能家居应该如何确保用户的安全和隐私
- Python学习之路(一)
热门文章
- 计算机工程制图箭头怎么画,AutoCAD制图时怎么画剖视的箭头 AutoCAD箭头画法教程...
- 4张图搞懂Salesforce的认证体系(附新手考证攻略)
- 自动生成sitemap地图PHP代码
- iOS中文件连接群晖服务器,教你使用群晖怎么在ios的“家庭‘’App(HomeKit)里添加Hom...
- 特斯拉第二季度电动汽车销量下降近 18%
- 397高校毕业设计选题
- 苹果改变手机型号_苹果的低碳铝将改变气候
- python目标检测给图画框,bbox画到图上并保存
- 如何随时远程开机并控制电脑
- 《软件工程与计算(卷二)》-Chapter9-10-软件体系结构