题目
给你一个非负整数数组 nums
。在一步操作中,你必须:
- 选出一个正整数
x
,x
需要小于或等于nums
中 最小 的 非零 元素。 nums
中的每个正整数都减去x
。
返回使 nums
中所有元素都等于 0
需要的 最少 操作数。
示例 1:
输入:nums = [1,5,0,3,5] 输出:3 解释: 第一步操作:选出 x = 1 ,之后 nums = [0,4,0,2,4] 。 第二步操作:选出 x = 2 ,之后 nums = [0,2,0,0,2] 。 第三步操作:选出 x = 2 ,之后 nums = [0,0,0,0,0] 。
思路
因为题目给定是非负整数数组,每次所有元素要减去一个小于最小值的正整数,相同的数字减去同一个数字得到结果相同,0可以不用操作,那么统计出不同的正整数数量是多少即可。先用排序将数列变为升序序列,然后遍历数组,使用标记变量tmp记录当前变量与上一个是否相同,相同则忽略,否则更新tmp的值为当前的nums[i],同时计数+1.最后的计数结果即为答案
代码
class Solution {
public int minimumOperations(int[] nums) {
Arrays.sort(nums);//排序为升序序列
int tmp=0,count=0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=tmp&&nums[i]>0){
//遇到和上一个不同的元素,更新tmp
tmp=nums[i];
count++;//计数+1
}
}
return count;
}
}