2357. 使数组中所有元素都等于零
2023-02-24 18:15 作者:目标力扣Knight | 我要投稿

方法一:模拟
只要数组中还有大于0的非零数,我们反复获取其中大于零的最小正整数,然后用数组中的每一个非零数减去最小正整数;
Python版本
C++版本
复杂度分析
时间复杂度: O(C)。数组中有多少种数,则会进行多少次循环,数值的值域的上限为100。
空间复杂度:O(1)。
方法二:贪心
将数组所有元素削减为零,等价于将数组中最大的元素削减为零;每一次操作删除最小的非零数,对于一个唯一的数来说,非零数立即被置为零,对于多个同值的数而言,将被同时减去最小非零数。因此问题就转化为:求数组中非零数的种数,此处的指的是是数值;
Python版本
C++版本
复杂度分析
时间复杂度:O(C)。最多重复100次。
空间复杂度:O(C)。集合去重,由题可知最多有100个不同的数字;
备注
使用while循环一定要注意入口条件和出口条件,在方法一中,我们本可以用
any() | all()
语句判断是否数组中是否还存在非零数,但不够简洁,写题速度不够快。其次注意本题的操作对象,每次均对非零数减去最小非零整数,若选取最小值再对所有数减去最小值,那么数组中每一个元素会无限减小,但永不为零,导致解题进入TLE
的死循环。总之慎用 while 循环,优选 for 循环