欢迎光临散文网 会员登陆 & 注册

2357. 使数组中所有元素都等于零

2023-02-24 18:15 作者:目标力扣Knight  | 我要投稿

2357. 使数组中所有元素都等于零

方法一:模拟

只要数组中还有大于0的非零数,我们反复获取其中大于零的最小正整数,然后用数组中的每一个非零数减去最小正整数;

Python版本

C++版本


复杂度分析

  • 时间复杂度: O(C)。数组中有多少种数,则会进行多少次循环,数值的值域的上限为100。

  • 空间复杂度:O(1)。

方法二:贪心

将数组所有元素削减为零,等价于将数组中最大的元素削减为零;每一次操作删除最小的非零数,对于一个唯一的数来说,非零数立即被置为零,对于多个同值的数而言,将被同时减去最小非零数。因此问题就转化为:求数组中非零数的种数,此处的指的是是数值;

Python版本

C++版本

复杂度分析

  • 时间复杂度:O(C)。最多重复100次。

  • 空间复杂度:O(C)。集合去重,由题可知最多有100个不同的数字;

备注

  1. 使用while循环一定要注意入口条件和出口条件,在方法一中,我们本可以用 any() | all()语句判断是否数组中是否还存在非零数,但不够简洁,写题速度不够快。其次注意本题的操作对象,每次均对非零数减去最小非零整数,若选取最小值再对所有数减去最小值,那么数组中每一个元素会无限减小,但永不为零,导致解题进入 TLE的死循环。总之 慎用 while 循环,优选 for 循环


2357. 使数组中所有元素都等于零的评论 (共 条)

分享到微博请遵守国家法律