來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/maximum-element-after-decreasing-and-rearranging
題目描述:
給你一個(gè)正整數(shù)數(shù)組 arr 。請(qǐng)你對(duì) arr 執(zhí)行一些操作(也可以不進(jìn)行任何操作),使得數(shù)組滿足以下條件:
arr 中 第一個(gè) 元素必須為 1 。
任意相鄰兩個(gè)元素的差的絕對(duì)值 小于等于 1 ,也就是說(shuō),對(duì)于任意的 1 <= i < arr.length (數(shù)組下標(biāo)從 0 開(kāi)始),都滿足 abs(arr[i] - arr[i - 1]) <= 1 。abs(x) 為 x 的絕對(duì)值。
你可以執(zhí)行以下 2 種操作任意次:
減小 arr 中任意元素的值,使其變?yōu)橐粋€(gè) 更小的正整數(shù) 。
重新排列 arr 中的元素,你可以以任意順序重新排列。
請(qǐng)你返回執(zhí)行以上操作后,在滿足前文所述的條件下,arr 中可能的最大值 。
思路:
要滿足兩個(gè)條件,先對(duì)數(shù)組進(jìn)行排序,然后將第一個(gè)元素賦值為1,第一個(gè)條件就滿足了。然后是第二個(gè)條件,
直接從索引1開(kāi)始遍歷排序后的數(shù)組,如果當(dāng)前元素和上一個(gè)元素不相等,且差值不等于1,則把當(dāng)前元素賦值為前一個(gè)元素+1
1846. 減小和重新排列數(shù)組后的最大元素.png
代碼實(shí)現(xiàn):
class Solution {
public int maximumElementAfterDecrementingAndRearranging(int[] arr) {
Arrays.sort(arr);
arr[0] = 1;
int len = arr.length;
for (int i = 1; i < len; i++) {
if (arr[i] == arr[i - 1] || arr[i] == arr[i - 1] + 1) {
continue;
} else {
arr[i] = arr[i - 1] + 1;
}
}
return arr[len - 1];
}
}
