力扣1089 的本手妙手俗手

题目

给你一个长度固定的整数数组 arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。注意:请不要在超过该数组长度的位置写入元素。要求:请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。示例 1:输入:[1,0,2,3,0,4,5,0]
输出:null
解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]
示例 2:输入:[1,2,3]
输出:null
解释:调用函数后,输入的数组将被修改为:[1,2,3]提示:1 <= arr.length <= 10000
0 <= arr[i] <= 9来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/duplicate-zeros
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

本手:模拟遍历数组arr,当arr[i]为0的时候数组右移动,并且i++,避免右移之后下一个还是0又继续右移,代码如下

class Solution {public void duplicateZeros(int[] arr) {for(int i=0;i<arr.length;i++){if(arr[i]==0){rightMove(arr,i);i++;//避免重复右移}}}//右移public void rightMove(int[] arr,int x){for(int i=arr.length-1;i>x;i--){arr[i]=arr[i-1];}}
}

时间复杂度 遍历为n,右移为n,所以复杂度为O(n^2),空间复杂度为O(1)

妙手:使用双指针,设两个指针p,q为0开始遍历数组,当arr[p]=0时,q+=2,p++,否则q++,p++,当

指针p大于或者等于数组长度时遍历结束,然后通过双指针的对应回溯把数组进行修改。

class Solution {public void duplicateZeros(int[] arr) {int len=arr.length;int p=0,q=0;while(q<len){if(arr[p]==0){q+=2;}else{q++;}p++;}//因为在上个遍历中最后p++,q可能+1,可能+2,所以取最小的回退,避免值对应的值丢失p--;q--;while(q>=0){if(q<len) arr[q]=arr[p];if(arr[p]==0 && --q>0) arr[q]=0;q--;p--;}}
}

两次遍历每次遍历时间复杂度为n,所以时间复杂度为O(n),空间复杂度为O(1)

俗手: 将数组转为字符串,让后将字符串的“0”替换成为“00”,最后截取数组长度的字符串转为int数组

class Solution {public void duplicateZeros(int[] arr) {String str=Arrays.stream(arr).mapToObj(String::valueOf).collect(Collectors.joining()).replaceAll("0","00");for(int i=0;i<arr.length;i++){arr[i]=str.charAt(i)-'0';}}
}

时间复杂度O(n+k) n为数组长度,k为数组中字符串为0的个数,空间复杂度O(1)

力扣1089 的本手妙手俗手相关推荐

  1. 本手妙手俗手为主题写一篇不少于800字的作文

    我们生活在一个技术发达的时代,科技的发展给我们带来了许多便利.但是,本手妙手俗手的精髓依然不可缺少.本手妙手俗手,字面上的意思就是以本领和技能来解决问题,而不是依赖外部技术和机械.这种方式的优势在于可 ...

  2. 客户成功的「本手、俗手、妙手」

    最近,2022 年高考语文全国卷的作文题又在网上火了一把: 「本手.俗手.妙手」是围棋的三个术语.本手是指合乎棋理的正规下法:俗手是指貌似合理,而从全局看通常会受损的下法:妙手是指出人意料的精妙下法. ...

  3. 妙手,本手,俗手,背后的逻辑是什么

    不太想凑热门,所以拖了两天,也不太想写命题作文,总觉得命题作文是揣度出题者的意图,是不是要大家安分守己,坚持本手,一样可以有所成就等等. 不过不好意思,我并不是这么认为的. 当我们谈及妙手,本手,俗手 ...

  4. 力扣1002.查找常用字符

    力扣 1002. 查找常用字符 本人力扣练习已上传至码云,可互相学习借鉴. 难度-简单 题目: 给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表 ...

  5. 力扣解题——求根到叶子节点数字之和

    难度:中等 题目:给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到 ...

  6. 力扣每日一题——独一无二出现的次数

    难度:简单 题目: 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数. 如果每个数的出现次数都是独一无二的,就返回 true:否则返回 false. 示例 1: 输入:arr = [1,2 ...

  7. 力扣(LeetCode)刷题,简单+中等题(第35期)

    力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升. 第1题:解码异或后的排列 试题要求如下: 回答(C语言): /*** Note: ...

  8. 力扣(LeetCode)刷题,简单+中等题(第34期)

    目录 第1题:整数转罗马数字 第2题:电话号码的字母组合 第3题:二叉树的所有路径 第4题:砖墙 第5题:下一个排列 第6题:括号生成 第7题:删除并获得点数 第8题:全排列 第9题:颜色分类 第10 ...

  9. 力扣(LeetCode)刷题,简单+中等题(第33期)

    目录 第1题:Z 字形变换 第2题:删除字符串中的所有相邻重复项 第3题:基本计算器 II 第4题:螺旋矩阵 第5题:螺旋矩阵 II 第6题:盛最多水的容器 第7题:删除有序数组中的重复项 II 第8 ...

最新文章

  1. 在CentOS 6.3 64bit上安装ActiveMQ 5.15.9实录
  2. js数组指定位置添加删除
  3. python利用scapy模块写一个TCP路由追踪和扫描存活IP的脚本
  4. SparkRPC源码分析之RPC管道与消息类型
  5. 火箭技术术语_多物理场仿真优化火箭发动机增材制造工艺
  6. 三层架构——配置文件
  7. AndroidJava try-catch-finally正确用法
  8. win7磁盘清理_为什么要清理磁盘碎片,win7电脑怎么清理磁盘碎片
  9. 如何化身BAT面试收割机?都是精髓!
  10. 戴尔vStart:加快虚拟化,并马上应用戴尔私有云
  11. eclipse反编译
  12. scala机器学习实战(三) 保险数据预测分析(LR算法详解)
  13. FormulaR1C1是EXCEL中单元格公式输入方法
  14. 2022-2028全球小脑牵引器行业调研及趋势分析报告
  15. JavaScript实现图片文字识别与读取
  16. 鸿蒙掉不掉凤羽符,装备各部件灌注符的获取方式(和肝燕面基成功,给萌新的福利)...
  17. 入门神经网络——识别图片是否为猫
  18. SSD-Tensorflow 512x512 训练配置
  19. 第九篇:强化学习Q-learning算法 通俗介绍
  20. 师傅带徒弟学:Python正则表达式-关东升-专题视频课程

热门文章

  1. 使用FFMpeg 获取MP3文件中的信息和图片
  2. Veeam BackupReplication简介
  3. skewness and kurtosis
  4. KPCB:2013年互联网女皇互联网趋势报告–解读版
  5. 大学,我们学到了什么
  6. CSS盒子模型居中方法,完整版开放下载
  7. Android:长度单位详解(px、dp、sp)
  8. WSL2跟踪 - 19013: Memory Reclaim内存回收
  9. yolov3预测图片
  10. Vue中使用百度地图——设置地图标注