算法刷题——7.2习题(2)

简介: 这是今天算法的第三题,难度为中等

文章目录


👨‍💻前言


这是今天算法的第三题,难度为中等,这个分开写吧。因为这个我也想了很久终于搞明白了,过来写写汇总一下理理思路,有小伙伴有更好的方法,欢迎评论区留言哦😁


使数组唯一的最小增量


题目描述

给你一个整数数组 nums 。每次 move 操作将会选择任意一个满足 0 <= i < nums.length 的下标 i,并将 nums[i] 递增 1。

返回使 nums 中的每个值都变成唯一的所需要的最少操作次数


示例 1:

输入:nums = [1,2,2]

输出:1

解释:经过一次 move 操作,数组将变为 [1, 2, 3]。


示例 2:

输入:nums = [3,2,1,2,1,7]

输出:6

解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。

可以看出 5 次或 5 次以下的 move 操作是不能让数组的每个值唯一的。


提示:

1 <= nums.length <= 105

0 <= nums[i] <= 105


来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/minimum-increment-to-make-array-unique


思路与分析

首先看题目有点懵圈,别懵别懵,我们来好好分析分析。

仔细分析题目:意思就是给你一个无序有重复的数组,每调用一次move方法,数组中的任意一个数加一,最少需要几次这个是数组才可以没有重复。

难点来了:很多小伙伴直接懵了,这还任意一个数加,还最少次数。其实呢小伙伴们仔细想想,什么时候次数最少呢,每次都加到有用的数上面不就最少了吗。

那么问题又来了,什么叫 每次加到有用的数上面的,那个才是有用的 ??

小伙伴们先考虑一点,如果说 这个数是数组中最大的,在让它加 还有意义吗。那么小伙伴自然而然就想出 排个序嘛,这不就小的在前,大的在后了。那么之后我们遍历一下所有的数据,如果它比前边的小(一般不会哈)或者等于,那我们就让它一直加1,直到比自身前一个大。顺便我们再记一下数count++。那么最后全部遍历之后是不是每个最少最少也比前一个大1呢,也可能大好几类,那是自然嘛。


有的小伙伴可能还会有疑问,这样真的是最少次数嘛???如果我们每次做的都是有用的他就是最少次数哦。小伙伴可以多用几组数据进行测测哦,代码可直接带走。😁


代码与结果

class Solution {
    public int minIncrementForUnique(int[] nums) {
        int count = 0;
        Arrays.sort(nums);
        for(int i = 1; i < nums.length ; i++){//这里要注意:如果i=0,第一次循环会出现下标越界情况
           while(nums[i] <= nums[i - 1]){
                nums[i] =  nums[i] + 1;
               count++;
           }
        }
        return count;
    }
}


👨‍💻总结


这个算法题呢,稍微有点难度,官方也是给了两种解法,有兴趣的小伙伴可以去看看哦。欢迎小伙伴评论区交流哦。

点击直接跳转


😎Spread my wings and fly away, I believe I can soar.

张开翅膀尽情飞翔,我相信我能高飞😎

相关文章
|
19天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
5月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
5月前
|
算法
数据结构和算法学习记录——习题-移除链表元素
数据结构和算法学习记录——习题-移除链表元素
24 0
|
1月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
13 0
|
3月前
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
|
3月前
|
算法 Python
【Leetcode刷题Python】改进的算法,高效求一个数的因子
一个高效的Python函数用于找出一个整数的所有因子,通过仅遍历到该数平方根的范围来优化性能。
38 0
|
5月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
5月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
5月前
|
算法 C语言
数据结构和算法学习记录——栈和队列习题-用队列实现栈、用栈实现队列(核心思路、解题过程、完整题解)二
数据结构和算法学习记录——栈和队列习题-用队列实现栈、用栈实现队列(核心思路、解题过程、完整题解)二
42 2
|
5月前
|
存储 算法 测试技术
数据结构学习记录——树习题-Complete Binary Search Tree(题目描述、输入输出示例、数据结构的选择、核心算法、计算左子树的规模)
数据结构学习记录——树习题-Complete Binary Search Tree(题目描述、输入输出示例、数据结构的选择、核心算法、计算左子树的规模)
77 1