[M贪心] lc1846. 减小和重新排列数组后的最大元素(贪心+双周赛51_3)
文章目录
- 1. 题目来源
- 2. 题目解析
1. 题目来源
链接:1846. 减小和重新排列数组后的最大元素
2. 题目解析
思路:
- 贪心题目猜结论…
- 结论 1: 一定存在一个最优解是一个单调数组。因为如果最优解是非单调数组的话,那么非单调的一段一定是上下波动不超过 1 的子段,那么就能将这段重排后使其变单调。
- 结论 2: 一定存在一个最优解,使得所有数的相对大小关系不变。即原数组中
a > b
,那么在最优解数组中也存在a` > b`
,即我们只需要让a
=a`
,b
=b`
即可。这样就能保证原数组与最优解数组中的各个元素的相对大小不发生变化。
- 由于最优解可以是一个单调数组,则我们可以针对原数组进行排序,最大的元素一定是末尾那个元素。再从首元素开始递推即可,每次将
f[i] = (f[i] == f[i - 1] ? f[i - 1] : f[i - 1] + 1)
变化即可。
看代码更容易理解。
- 时间复杂度:O(nlogn)O(nlogn)O(nlogn)
- 空间复杂度:O(1)O(1)O(1)
代码:
class Solution {public:int maximumElementAfterDecrementingAndRearranging(vector<int>& arr) {sort(arr.begin(), arr.end());arr[0] = 1;for (int i = 1; i < arr.size(); i ++ ) if (arr[i] == arr[i - 1]) continue;else arr[i] = arr[i - 1] + 1;return arr.back();}
};
[M贪心] lc1846. 减小和重新排列数组后的最大元素(贪心+双周赛51_3)相关推荐
- LeetCode——1846. 减小和重新排列数组后的最大元素(Maximum Element After Decreasing and Rearranging)[中等]——分析及代码(Java)
LeetCode--1846. 减小和重新排列数组后的最大元素[Maximum Element After Decreasing and Rearranging][中等]--分析及代码[Java] 一 ...
- LeetCode 每日一题 1846. 减小和重新排列数组后的最大元素
1846. 减小和重新排列数组后的最大元素 给你一个正整数数组 arr .请你对 arr 执行一些操作(也可以不进行任何操作),使得数组满足以下条件: arr 中 第一个 元素必须为 1 . 任意相邻 ...
- LeetCode 1846. 减小和重新排列数组后的最大元素
1846. 减小和重新排列数组后的最大元素 Idea 这题其实挺简单的,首先把数组排序,然后按照要求把数组的第一位设置为1,之后遍历整个数组,按照约束条件逐个过滤,对于不符合条件的idx数,把它重置为 ...
- 力扣 1846. 减小和重新排列数组后的最大元素(中等)
题目 给你一个正整数数组 arr .请你对 arr 执行一些操作(也可以不进行任何操作),使得数组满足以下条件: arr 中 第一个 元素必须为 1 . 任意相邻两个元素的差的绝对值 小于等于 1 , ...
- LeetCode题解(1846):减小和重新排列数组后的最大元素(Python)
题目:原题链接(中等) 标签:排序.贪心算法 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(NlogN)O(NlogN)O(NlogN) O(N)O(N)O(N) 68ms ...
- Php 删除数组后几个元素
<?php /* * 文件分类: practice@helkbore * 删除数组后几个元素 * 整理时间 2016年2月5日10:24:42 */ $arr1 = array('aa', 'b ...
- 每天一道LeetCode-----将数组/链表后k个元素移动到前面
Rotate Array 原题链接Rotate Array 回转一个给定数组k步,本质上是将后k个元素移动到前面(需要保证k小于数组元素个数) 不在原数组上操作的话比较简单,新开一个vector保存回 ...
- js中实现截取数组的前几个元素以及后几个元素作为一个新数组的方法
数组中的slice()和splice()方法都可以实现对数组截取 const arr=[1,2,3,4,5,6,7,8]//截取数组前三个元素 const sliceA=arr.slice(0,3) ...
- LeetCode简单题之重新排列数组
题目 给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,-,xn,y1,y2,-,yn] 的格式排列. 请你将数组按 [x1,y1,x2,y2,-,xn,yn] 格式重新排列,返回重 ...
最新文章
- SpringBoot异常处理的简单理解
- oracle linux查看磁盘,fdisk命令_Linux fdisk命令使用详解:查看磁盘使用情况与磁盘分区...
- C++ 程序员如何迎接 Windows 10 的到来
- 每天一个实用小技巧!教你在Mac上快速输入长文本
- windows10双系统安装ubuntu18.04
- collections模块之namedtuple
- PhpExcel数组输出到Excel浏览器下载
- jmeter脚本录制作业_399
- DedeCMS专题版块多种方法随意调用
- FreeMarker中获取Map内容
- 安装axios时报错
- 阿里fastjson 对象转JSON
- 模糊C均值聚类算法及实现
- PPT如何压缩?PPT文件压缩的方法有哪些
- 深入理解color model(颜色模型)
- lua 调用c++ dll, 提示:%1 不是有效的 Win32 应用程序。
- 联想小新 Pad Pro 12.6 怎么样
- 泸州职业技术学院计算机单招试题,2016泸州职业技术学院高职单招测试题(含答案解析)...
- 如何听节拍器_七个方法可以拯救你的节奏感!
- 如果你对自己有要求 | “回顾,再出发”——记2020软工提问回顾与个人总结