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

上海免费网站建设咨询/seo外包费用

上海免费网站建设咨询,seo外包费用,怎么做网站关键词排名,泉州网站建设哪家好一、题目描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums […

一、题目描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: 
[0]

二、解题思路

题目要求必须原地操作,不能复制数组。比如示例里的数组是[0,1,0,3,12],处理后变[1,3,12,0,0]。

看起来非零元素的顺序要保持不变,然后把零都放到后面。

可能的一个思路是,用双指针的方法。比如,一个指针用来遍历数组,另一个指针记录当前非零元

素应该放的位置。然后每次遇到非零元素,就把它放到前面的位置,最后剩下的位置补零。初始化

一个指针j=0。然后遍历数组,当遇到nums[i]不等于零的时候,就把nums[j]设置为nums[i],然后j

加一。这样遍历完一遍之后,所有非零元素都被移到了前面,顺序不变。之后剩下的位置j到末尾

都设置为零。这个方法应该可行,而且时间复杂度是O(n),空间复杂度是O(1),符合要求。

如例子中的第一个例子,遍历的时候,i从0开始。当i=0的时候,元素是0,跳过。i=1的时候元素是

1,放到nums[0],j变成1。i=2的时候是0,跳过。i=3的时候是3,放到nums[1],j变成2。i=4的时

候是12,放到nums[2],j变成3。然后遍历结束后,从j=3的位置开始,将后面的元素都设为0。所

以原数组被修改为1,3,12,0,0,符合要求。

原数组是[1,2,3,0,4]。处理过程:

i=0,nums[i]=1,赋值给j=0,j=1。

i=1,nums[i]=2,赋值给j=1,j=2。

i=2,nums[i]=3,赋值给j=2,j=3。

i=3,nums[i]=0,跳过。

i=4,nums[i]=4,赋值给j=3,j=4。

遍历结束后,j=4,此时n=5,所以剩下的位置是4到4,即nums[4]=0。这时候数组变成了

[1,2,3,4,0]。原来的那个0在索引3的位置,已经被覆盖了,原来的数组中的4被移动到了索引3的位

置,然后索引4的位置被置零。

原问题要求将所有零移动到末尾,非零元素的相对顺序不变。原来的数组中的零是位于索引3的位

置,处理后,数组是[1,2,3,4,0],这样确实符合要求。那这个方法是可行的。比如原来的4在索引4

的位置,现在被移动到了索引3的位置,后面被置零。当i=4的时候,此时j=3,所以nums[3]=4,而

原来的nums[3]是0,所以没有问题。然后遍历结束后,将j=4的位置置零,即nums[4]=0。这样处

理后的结果是正确的。

三、大致步骤

1. 初始化j=0。

2. 遍历数组,i从0到n-1。

3. 如果nums[i]不等于0,就将nums[j] = nums[i],然后j自增。

4. 遍历结束后,将j到n-1的位置都置为0。

想到这里,假设数组是[1,0,2,0,3],当i=0时,nums[j=0]=1,j=1。i=1的时候是0,跳过。i=2的时候

是2,此时j=1,所以nums[1]=2,j=2。这样原来的nums[1]的0就被覆盖了。但这样没问题,因为之

后会把后面的位置都置零。 所以这个方法是可行的。

要解决将数组中的所有零移动到末尾并保持非零元素顺序的问题,可以使用双指针方法。具体思路

是遍历数组,将非零元素依次移到数组前面,然后将剩余位置填充为零。这种方法确保了原地操作

且时间复杂度为O(n)。

四、方法思路

  1. 双指针遍历:使用指针j来记录当前非零元素应放置的位置。遍历数组,当遇到非零元素时,将其移到j的位置,并递增j

  2. 填充零:遍历结束后,所有非零元素已移到数组前面,剩余位置从j开始填充零。

五、解决代码

class Solution {
public:void moveZeroes(vector<int>& nums) {int j = 0;// 将非零元素移动到数组前面for (int i = 0; i < nums.size(); ++i) {if (nums[i] != 0) {nums[j++] = nums[i];}}// 将剩余位置填充为零while (j < nums.size()) {nums[j++] = 0;}}
};

以上就是,这道题的全解啦!!!!关注博主,持续分享力扣算法题。

http://www.whsansanxincailiao.cn/news/32041794.html

相关文章:

  • 做网站搜索结果的代码/百度关键词快速优化
  • 网页制作视频教程网/重庆seo排名外包
  • 上海做网站服务商/googleseo服务公司
  • 分销微信小程序开发/seo完整教程视频教程
  • 备案 个人网站建设方案书/seo秘籍优化课程
  • nas上建设网站/写一篇软文多少钱
  • 绵阳安州区做网站的有哪些/青岛网络工程优化
  • 网站个人备案/seo优化排名教程百度技术
  • 山东电商网站建设/推广方法有哪几种
  • 专业做简历用什么软件/宁波网站制作优化服务
  • 有啥创意可以做商务网站的/长沙有实力seo优化公司
  • 淘宝客网站主题模板/seo的定义
  • 国内免费云主机/长沙seo优化公司
  • 温岭网站制作/设计师必备的6个网站
  • 网站做icp备案需要多久/网址收录大全
  • 大连网站建设方案案例/网络工程师
  • 销售网站平台怎么做的/网络优化工程师简历
  • 政府力推企业做网站/自然搜索优化
  • web网站开发与实现/什么是口碑营销
  • 做网站专题模板/武安百度seo
  • 惠水网站建设/专业网络推广公司排名
  • vps运行iis网站 需要输入账号和密码/搜索引擎优化概述
  • 网站里的课程配图怎么做/深圳网络推广培训学校
  • 在家自己做网站/广东疫情最新消息今天
  • icp备案信息查询/seo技巧优化
  • 咨询聊城网站建设/最新新闻消息
  • 火车票网站建设多少钱/sem推广竞价托管
  • 企业网站如何制作/百度搜索排名靠前
  • 仁怀网站建设/优化推广什么意思
  • 网络营销型企业网站案例/关键词提取工具