【2460. 对数组执行操作】

news/2024/12/29 15:59:38/

来源:力扣(LeetCode)

描述:

给你一个下标从 0 开始的数组 nums ,数组大小为 n ,且由 非负 整数组成。

你需要对数组执行 n - 1 步操作,其中第 i 步操作(从 0 开始计数)要求对 nums 中第 i 个元素执行下述指令:

  • 如果 nums[i] == nums[i + 1] ,则 nums[i] 的值变成原来的 2 倍,nums[i + 1] 的值变成 0 。否则,跳过这步操作。

在执行完 部 操作后,将所有 0 移动 到数组的 末尾

  • 例如,数组 [1,0,2,0,0,1] 将所有 0 移动到末尾后变为 [1,2,1,0,0,0]

返回结果数组。

注意 操作应当 依次有序 执行,而不是一次性全部执行。

示例 1:

输入:nums = [1,2,2,1,1,0]
输出:[1,4,2,0,0,0]
解释:执行以下操作:
- i = 0: nums[0] 和 nums[1] 不相等,跳过这步操作。
- i = 1: nums[1] 和 nums[2] 相等,nums[1] 的值变成原来的 2 倍,nums[2] 的值变成 0 。数组变成 [1,4,0,1,1,0]- i = 2: nums[2] 和 nums[3] 不相等,所以跳过这步操作。
- i = 3: nums[3] 和 nums[4] 相等,nums[3] 的值变成原来的 2 倍,nums[4] 的值变成 0 。数组变成 [1,4,0,2,0,0]- i = 4: nums[4] 和 nums[5] 相等,nums[4] 的值变成原来的 2 倍,nums[5] 的值变成 0 。数组变成 [1,4,0,2,0,0] 。
执行完所有操作后,将 0 全部移动到数组末尾,得到结果数组 [1,4,2,0,0,0]

示例 2:

输入:nums = [0,1]
输出:[1,0]
解释:无法执行任何操作,只需要将 0 移动到末尾。

提示:

  • 2 <= nums.length <= 2000
  • 0 <= nums[i] <= 1000

方法:直接模拟

思路与算法

根据题意要求,如果 nums[i] == nums[i+1] ,则需要进行以下变换:

  • nums[i] = 2 × nums[i];
  • nums[i+1] = 0;

在执行上述完操作后,将所有 0 移动到数组的末尾。在遍历数组时,遇到前后相等的两个元素时直接进行变换,在遍历的同时进行原地交换,将所有非零的元素移动到数组的头部。

代码:

class Solution {
public:vector<int> applyOperations(vector<int>& nums) {int n = nums.size();for (int i = 0, j = 0; i < n; i++) {if (i + 1 < n && nums[i] == nums[i + 1]) {nums[i] *= 2;nums[i + 1] = 0;}if (nums[i] != 0) {swap(nums[i], nums[j]);j++;}}return nums;}
};

执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:8.6 MB, 在所有 C++ 提交中击败了81.28%的用户
复杂度分析
时间复杂度:O(n),其中 n 表示数组的长度。只需遍历一遍数组即可,因此时间复杂度为 O(n)。
空间复杂度:O(1)。直接在原数组上进行修改即可,不需要占用额外的空间。
author:LeetCode-Solution


http://www.ppmy.cn/news/223416.html

相关文章

LeetCode 2465. Number of Distinct Averages【哈希表,双指针,排序】简单

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

LNMP服务搭建

这里写目录标题 什么是LNMP架构【安装 Nginx 服务】【安装 MySQL 服务】 什么是LNMP架构 LNMP代表的就是&#xff1a;Linux系统下NginxMySQLPHP这种网站服务器架构Linux是一类Unix计算机操作系统的统称&#xff0c;是目前最流行的免费操作系统。代表版本有&#xff1a;debian、…

Cherry STREAM KEYBOARD 剪刀脚键盘拆卸

Cherry STREAM KEYBOARD 剪刀脚键盘拆卸&#xff1a; 使用手指或者是牙签等细小物体从键帽的左下角或者右下角插入轻轻撬起&#xff08;慢&#xff09;&#xff0c;假如不好撬的话就多试一试四个角&#xff0c;一般是两个卡扣&#xff08;左下角右下角各一个&#xff09;&#…

计算机专业笔记本需要小键盘吗,笔记本小键盘数字键不能用 并点击解除锁定...

导语:提到小键盘,大多数人都知道,有朋友问联想笔记本电脑小键盘怎么打开,当然了,还有人问笔记本电脑右边数字键打不出数字,这到底怎么回事呢?其实笔记本电脑数字键盘打不出数字呢,下面小编就为大家说说笔记本小键盘数字键不能用,一起来了解吧。 笔记本小键盘数字键不能…

怎么在windows笔记本使用html,聊聊如何用笔记本电脑装逼

熟悉我的同学都知道&#xff0c;我是个土生土长的上海人。 在我高中那年&#xff0c;星巴克开始在上海普及&#xff0c;那时候这绝对是个“小资消费场所”&#xff0c;咖啡师们各个英文口语流利&#xff0c;表情自信、优雅&#xff0c;在你点单时还会装模作样地问一句&#xff…

小米笔记本bios版本大全_聊一款被“差别对待”的笔记本电脑

聊电脑这么多年,近两年里出现了一个过去不怎么见到的现象,那就是一大部分主流价位笔记本,都推出了搭载AMD处理器的“锐龙版”。 对于预算不足的用户来说,“锐龙版”保证了和“英特尔版”接近的性能,牺牲了一点续航能力,换取更低的预算,性价比更高。 大多数情况下,除了换…

ThinkPad键盘拆解与清理(附图详解)

ThinkPad键盘拆解与清理&#xff08;附图详解&#xff09; 在许多用户的眼里&#xff0c;键盘一直被视作非常精密的部件&#xff0c;因此当出现使用不当导致键盘松散&#xff0c;或者使用时间长了键盘底下有杂物要进行整理的时候&#xff0c;或者意外情况造成键盘松落(前几天…

华为matebook笔记本鸿蒙,聊聊鸿蒙对笔记本电脑行业的影响

原标题&#xff1a;聊聊鸿蒙对笔记本电脑行业的影响 最近这段时间&#xff0c;各大数码综合讨论区被一个词占据了&#xff0c;那就是华为新推出的操作系统——鸿蒙HarmonyOS。 鸿蒙具体是干什么的&#xff0c;它有什么用&#xff1f;推荐大家去百度搜索一下&#xff0c;华为官网…