当前位置: 首页 > news >正文

织梦做的网站别人提交给我留的言我去哪里看贵州网站建设设计公司哪家好

织梦做的网站别人提交给我留的言我去哪里看,贵州网站建设设计公司哪家好,seo推广需要网站吗,制作灯笼的过程和步骤来源:力扣(LeetCode) 描述: 给你一个非负整数数组 nums 。在一步操作中,你必须: 选出一个正整数 x ,x 需要小于或等于 nums 中 最小 的 非零 元素。nums 中的每个正整数都减去 x。 返回使 n…

来源:力扣(LeetCode)

描述:

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

  • 选出一个正整数 xx 需要小于或等于 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]

示例 2:

输入:nums = [0]
输出:0
解释:nums 中的每个元素都已经是 0 ,所以不需要执行任何操作。

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 100

方法一:排序 + 模拟

这道题要求计算将非负整数数组 nums 中的所有元素减少到 0 的最少操作数。用 m 表示数组 nums 中的最小非零元素,则可以选择不超过 m 的正整数 x,将数组中的每个非零元素减 x。为了使操作数最少,应选择 x = m,理由如下。

  • 当选择 x = m 时,经过一次操作之后,数组中的所有元素 m 都变成 0,且其余的所有非零元素都减少 m。
  • 当选择 x < m 时,经过一次操作之后,数组中的所有元素 m 在减少 x 之后仍大于 0,为了使数组中的最小非零元素变成 0,至少还需要一次操作,因此至少需要两次操作使数组中的所有元素 m 都变成 0,且其余的所有非零元素都减少 m。

由于当 x < m 时使元素 m 变成 0 的操作数大于当 x = m 时使元素 m 变成 0 的操作数,且两种方案中,使元素 m 变成 0 之后,剩余的最小非零元素相同(所有非零元素都减少 m),因此只有当 x = m 时才能使操作数最少。

根据上述分析,应使用贪心策略使操作数最少,贪心策略为每次选择数组中的最小非零元素作为 x,将数组中的每个非零元素减 x。

可以根据贪心策略模拟操作过程,计算最少操作数。

首先将数组 nums 按升序排序,然后从左到右遍历排序后的数组 nums。对于每个遍历到的非零元素,该元素是数组中的最小非零元素,将该元素记为 x,将数组中的每个非零元素都减 x,将操作数加 1。遍历结束之后,即可得到最少操作数。

代码:

class Solution {
public:void subtract(vector<int>& nums, int x, int startIndex) {int length = nums.size();for (int i = startIndex; i < length; i++) {nums[i] -= x;}}int minimumOperations(vector<int>& nums) {int ans = 0;sort(nums.begin(), nums.end());int length = nums.size();for (int i = 0; i < length; i++) {if (nums[i] > 0) {subtract(nums, nums[i], i);ans++;}}return ans;}
};

执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:7.9 MB, 在所有 C++ 提交中击败了100.00%的用户
复杂度分析
时间复杂度:O(n2),其中 n 是数组 nums 的长度。排序需要 O(nlogn) 的时间,排序之后需要遍历数组一次,对于每个非零元素,将数组中的所有非零元素减去最小非零元素需要 O(n) 的时间,因此时间复杂度是 O(n2)。
空间复杂度:O(logn),其中 n 是数组 nums 的长度。排序需要 O(logn) 的递归调用栈空间。

方法二:哈希集合

由于每次操作都将数组中的所有非零元素减少一个相同的值,因此数组中的相等元素减少到 0 的操作数相等,数组中的不相等元素减少到 0 的操作数不相等。

又由于使用贪心策略操作时,每次操作都会将数组中的最小非零元素减少到 0,因此最少操作数等于数组中的不同非零元素的个数。

使用哈希集合存储数组中的所有非零元素,则哈希集合的大小等于数组中的不同非零元素的个数,即为最少操作数。

需要注意的是,由于目标是将数组中的所有元素减少 0,如果数组中的一个元素已经是 0 则不需要对该元素执行操作,因此只需要考虑数组中的不同非零元素的个数。

代码:

class Solution {
public:int minimumOperations(vector<int>& nums) {unordered_set<int> hashSet;for (int num : nums) {if (num > 0) {hashSet.emplace(num);}}return hashSet.size();}
};

执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:8.2 MB, 在所有 C++ 提交中击败了28.86%的用户
复杂度分析
时间复杂度:O(n),其中 n 是数组 nums 的长度。需要遍历数组一次,每个非零元素加入哈希集合的时间是 O(1)。
空间复杂度:O(n),其中 n 是数组 nums 的长度。哈希集合需要 O(n) 的空间。
author:LeetCode-Solution

http://www.yayakq.cn/news/266511/

相关文章:

  • 淘宝客购物网站的怎么做好看的企业网站
  • 校园网站怎么做商城网站怎么做
  • 深圳聘请做网站人员甘肃省住房和城乡建设部网站首页
  • 海外sns网站网站结构建设方案
  • 100个最全的免费网站网站基本参数设置模块
  • 58网站建设的目的网站的seo如何设计
  • 网站建设电脑大多怎么办长沙软件开发
  • 团购机票网站建设网站数字化建设
  • 厦门市建设工程在哪备案网站计生网站生育文明建设
  • 杭州哪家网站建设好cad二次开发
  • 电子商务网站建设与维护考试网站运营 网站建设
  • 昌吉做网站需要多少钱企业网络搭建教程
  • 免费素材网站大全网站售后服务
  • 滁州市建设工程协会网站wordpress 文章评价插件
  • 建设规划许可证公示网站黑群晖wordpress建站
  • 有关网站建设的毕业设计企业邮箱是啥意思
  • 黑龙江省生产建设兵团知青网站做现货黄金网站
  • 建立外贸网站海南哪家公司做网站
  • 网站logo素材外贸网站域名用境内还是境外
  • 建设生鲜网站价格网站建设分为哪几个步骤
  • 设计师素材网站开发建婚恋网站需要多少钱
  • 大连网站制作的公司哪家好网站解封原因
  • 做微网站必须要有公众号吗互联网推广的方式
  • 左右翻网站模版商标注册证电子版查询
  • 民宿设计网站大全wordpress 防分析
  • 湖北网站优化公司单位建设网站硬件
  • 网站开发从零到上线中国万网官方网站
  • 娄底企业网站建设公司信息流优化师怎么入行
  • 安徽龙山建设网站常用于网站推广的营销手段是
  • 建一个网站大概需要多长时间给被k的网站做友链