【每日一题Day128】LC2357使数组中所有元素都等于零 | 排序+模拟 哈希表

简介: 【每日一题Day128】LC2357使数组中所有元素都等于零 | 排序+模拟 哈希表

使数组中所有元素都等于零【LC2357】

给你一个非负整数数组 nums 。在一步操作中,你必须:

  • 选出一个正整数 xx 需要小于或等于 nums最小非零 元素。
  • nums 中的每个正整数都减去 x

返回使 nums 中所有元素都等于 0 需要的 最少 操作数。

排序+模拟

  • 思路:
  • 将数组升序排序后,每次减去的数值x小于等于数组中第一个非零元素m,为了使操作次数最小,那么应使x=m【贪心】
  • 遍历数组中的每个元素nums[i],记录当前已经减去的数的总和delNum,那么每次操作后,数组中元素的值为nums[i]-delNum,每遇到一个不为0的数字,操作数加1并更新delNum
  • 实现
class Solution {
    public int minimumOperations(int[] nums) {
        int n = nums.length;
        int count = 0, delNum = 0;
        Arrays.sort(nums);
        for (int i = 0; i < n; i++){
            if (nums[i] - delNum == 0) continue;
            // delNum += (nums[i] - delNum);
            delNum = nums[i];// 操作次数取决于数组中不同元素的个数
            count++;
        }
        return count;
    }
}

复杂度

时间复杂度:O ( n l o g n ) ,n为数组长度,排序所需要的时间复杂度

空间复杂度:O ( 1 )

哈希表

  • 思路:可以发现操作次数取决于数组中不相等元素的个数,因此可以使用哈希表记录数组中不同元素的个数
  • 实现
class Solution {
    public int minimumOperations(int[] nums) {
        int n = nums.length;
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < n; i++){
            if (nums[i] == 0) continue;
            set.add(nums[i]);
        }
        return set.size();
    }
}

复杂度

  • 时间复杂度:O(n),n为数组长度
  • 空间复杂度:O(n)
目录
相关文章
|
6月前
【每日一题Day176】LC2404出现最频繁的偶数元素 | 哈希表
【每日一题Day176】LC2404出现最频繁的偶数元素 | 哈希表
50 0
【每日一题Day176】LC2404出现最频繁的偶数元素 | 哈希表
|
6月前
|
机器学习/深度学习
【每日一题Day120】LC2341数组能形成多少数对 | 哈希表 排序
【每日一题Day120】LC2341数组能形成多少数对 | 哈希表 排序
40 0
|
6月前
|
存储
【每日一题Day132】LC23633合并相似的物品 | 哈希表 排序+双指针
【每日一题Day132】LC23633合并相似的物品 | 哈希表 排序+双指针
52 0
|
6月前
【每日一题Day340】LC2251花期内花的数目 | 差分+哈希表+排序 排序+二分查找
【每日一题Day340】LC2251花期内花的数目 | 差分+哈希表+排序 排序+二分查找
38 0
|
6月前
|
存储
【每日一题Day158】LC2395和相等的子数组 | 哈希表
【每日一题Day158】LC2395和相等的子数组 | 哈希表
31 0
|
6月前
【每日一题Day163】LC2367算术三元组的数目 | 二分查找 哈希表
【每日一题Day163】LC2367算术三元组的数目 | 二分查找 哈希表
30 0
|
5月前
力扣随机一题 哈希表 排序 数组
力扣随机一题 哈希表 排序 数组
33 1
|
6月前
|
存储
【每日一题Day352】LC1726同积元组 | 哈希表+排列组合
【每日一题Day352】LC1726同积元组 | 哈希表+排列组合
35 0
|
6月前
【每日一题Day234】LC1171从链表中删去总和值为零的连续节点 | 链表模拟 哈希表+前缀和
【每日一题Day234】LC1171从链表中删去总和值为零的连续节点 | 链表模拟 哈希表+前缀和
40 0
|
6月前
【每日一题Day215】LC1090受标签影响的最大值 | 贪心+排序+哈希表
【每日一题Day215】LC1090受标签影响的最大值 | 贪心+排序+哈希表
45 0