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

深圳网站建设服务平台纷享销客

深圳网站建设服务平台,纷享销客,宣传片制作公司推荐,扬中信息发布题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入:…

题目:

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

解决:

解法1:

设置双指针i,j。i遍历,j指向非零元素。i遇到非零元素就把它挪到j所在位置,同时j后移一位。当i全遍历完也就是j指向非零元素的后一个位置,则i开始第二次遍历,起始位置就是j所在位置,把后面一段元素位置的元素全置为零。时间复杂度为O(n)。其实是i遍历了一遍,j近似也遍历了一遍。

public void moveZeroes(int[] nums) {if(nums==null) {return;}//第一次遍历时j指针记录非零的个数,非0的都赋值给nums[j]int j=0;for(int i=0;i<nums.length;i++){if(nums[i]!=0){nums[j++]=nums[i];}}//非0元素统计完后剩下的都是0,// 则第二次遍历把末尾元素都赋值为0即可for(int i=j;i<nums.length;i++){nums[i]=0;}}

解法2:

官方题解。设置双指针,但不是采取挪动方式,而是用交换的方式,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。则每次交换都是将左指针的零与右指针的非零数交换且非零数的相对位置未改变。

这样只用遍历一遍。但是这样的效率比挪动更低。

public void moveZeroes(int[] nums) {int n = nums.length, left = 0, right = 0;while (right < n) {if (nums[right] != 0) {swap(nums, left, right);left++;}right++;}}public void swap(int[] nums, int left, int right) {int temp = nums[left];nums[left] = nums[right];nums[right] = temp;
}

加油加油^_^

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

相关文章:

  • 个人可以建门户网站吗网站建设排名优化公司哪家好
  • 百度做网站多少钱网站建设尾款结算申请
  • 模版网站系统产品推广软文范文
  • 建个网站费用大概多少钱一年福田欧曼
  • 广告设计接单网站衡器行业网站建设模板
  • thinkphp手机网站开发公司网站做一年多少钱
  • 网站建设的工资短视频运营
  • 东莞物流网站建设成都广告设计公司电话
  • 公司网站与推广公司网站规划
  • 广东公司响应式网站建设报价wordpress同步微信素材
  • 网站建设加推广需要多少钱如何来做网站优化
  • 江门网站建设兼职重庆做营销型网站建设公司
  • 网站管理后台地址怎么查询石家庄工程大学
  • 广东建设协会网站黄村做网站哪家快
  • 浦江建设局网站espcms易思企业网站系统
  • 潍坊建设网站公司免费手机建站平台
  • 简单做网站的价格漳州网站优化
  • 网站报价表格摄像网站建设
  • 又一个wordpress站点怎么进牛网站
  • 桂林市天气预报15天合肥seo外包平台
  • 福州做网站公司排名工厂网站建设公司
  • 杨凌网站开发武清做网站
  • 宁波医院通网站建设中文电子商务网站模板
  • 网站开发公司 上网站开发维护费计入什么科目
  • 厦门海绵城市建设官方网站类似freenom的免费域名网站
  • 大气婚庆网站源码塑胶网站建设
  • 您在工信部门备案网站获取的icp备案号东莞外贸模板建站
  • 沧浪企业建设网站公司ui界面设计图
  • 网站开发 建设叫什么公司企业做网站好做吗
  • 哪个网站是专门做男人衣服的网站建设课后心得