每日一题——LeetCode1089.复写0

方法一 splice:

通过数组的slice方法,碰到 0就在后面加一个0,最后截取原数组的长度,舍弃后面部分。

但这样做是违反了题目的要求,不要在超过该数组长度的位置写入元素。

var duplicateZeros = function(arr) {var len = arr.lengthfor(let i=0;i<len;i++){if(arr[i]===0){arr.splice(i,0,0)i++}}arr.splice(len)
};

消耗时间和内存情况:

方法二 ——方法一优化:

 不直接操作arr,将arr的字符串形式赋值给str,对str按照要求进行修改,然后将str按位赋值给arr

这种方法也是算取巧

var duplicateZeros = function(arr) {var str =  arr.join('').replaceAll('0','00')for(var i=0;i<arr.length;i++){arr[i]=str[i]}
};

消耗时间和内存情况:

方法三 两次遍历+双指针( 时间复杂度O(n) 空间复杂度O(1) )

用实例来说明:

arr =[0,1,7,6,0,2,0,7],arr里面虽然有3个0,但是前面两个0被复写完之后第三个0就被舍弃了,所以第一次遍历记录arr里有多少个0能被复写,并记录最后一个能被复写的0的位置

双指针left和right,right指向数组的末尾,left指向能被保留下来的最后一个元素,那么(left,right]之间的元素都是要被舍弃的。

如果left指向的是非0元素,那么就把left指向的元素移动到right处,left、right都往前移动一位

如果left指向的是0元素,则看这个0是不是能被复写的0,如果不是就按照非0元素处理,如果是则right以及right-1的位置都要被赋值为0

两次单层循环,没有使用其他数组或字符串,这应该才是最为理想的解法

var duplicateZeros = function(arr) {var right = arr.length-1,left=0,countfor(let i=0;i<arr.length;i++){if(arr[i]===0 && right-i>left){left++count=i} }left = right-leftwhile(left>=0){if(arr[left]===0 && left<=count){arr[right]=0right--arr[right]=0right--left--}else{arr[right]=arr[left]right--left--}}
};

消耗时间和内存情况:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/327515.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超简单的详细教程:如何为一个GitHub开源项目做出贡献!

仓库&#xff1a;Ai-trainee/GPT-Prompts-Hub 让我们通过一个具体的例子&#xff0c;详细了解如何从克隆一个GitHub仓库开始&#xff0c;一步步地贡献到一个项目。以下是详细步骤&#xff0c;包括所需的代码和说明&#xff1a; 首先我们Fork想要贡献的项目&#xff0c;然后请看…

网络安全红队常用的攻击方法及路径

一、信息收集 收集的内容包括目标系统的组织架构、IT资产、敏感信息泄露、供应商信息等各个方面&#xff0c;通过对收集的信息进行梳理&#xff0c;定位到安全薄弱点&#xff0c;从而实施下一步的攻击行为。 域名收集 1.备案查询 天眼查爱企查官方ICP备案查询 通过以上三个…

MySQL进阶篇(一)存储引擎

一、MySQL 体系结构 &#xff08;1&#xff09; 连接层 最上层是一些客户端和链接服务&#xff0c;包含本地 sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于 连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念&#xf…

TSConfig 配置(tsconfig.json)

详细总结一下TSConfig 的相关配置项。个人笔记&#xff0c;仅供参考&#xff0c;欢迎批评指正&#xff01; 另外&#xff0c;如果想了解更多ts相关知识&#xff0c;可以参考我的其他笔记&#xff1a; vue3ts开发干货笔记ts相关笔记&#xff08;基础必看&#xff09;ts相关笔记…

【十六】【动态规划】97. 交错字符串、712. 两个字符串的最小ASCII删除和、718. 最长重复子数组,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略&#xff0c;它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题&#xff0c;并将每个小问题的解保存起来。这样&#xff0c;当我们需要解决原始问题的时候&#xff0c;我们就可以直接利…

Redis基础学习一

1. Redis 入门 1.1. Redis 诞生历程 1.1.1.从一个故事开始 08 年的时候有一个意大利西西里岛的小伙子&#xff0c;笔名 antirez&#xff08;http://invece.org/&#xff09;&#xff0c;创建了一个访客信息网站 LLOOGG.COM。有的时候我们需要知道网站的访问情况&#xff0c;…

软件测试/测试开发丨Vuetify框架的使用

介绍 Vuetify 是一个基于 Vue.js 精心打造 UI 组件库&#xff0c;整套 UI 设计为 Material 风格。能够让没有任何设计技能的开发者创造出时尚的 Material 风格界面。 为什么要使用Vuetify框架 所有组件遵从 Material Design 设计规范&#xff0c;UI 体验非常优秀&#xff0c…

软件测试|深入解析Docker Run命令:创建和启动容器的完全指南

简介 Docker是一种流行的容器化平台&#xff0c;用于构建、分发和运行应用程序。其中一个最基本且重要的Docker命令是docker run&#xff0c;用于创建和启动容器。本文将详细解析docker run命令的用途、参数和示例&#xff0c;帮助您全面掌握创建和启动容器的过程。 docker r…

Springboot整合MQ学习记录

Mq介绍 RabbitMQ是由erlang语言开发&#xff0c;基于AMQP&#xff08;Advanced Message Queue 高级消息队列协议&#xff09;协议实现的消息队列&#xff0c;它是一种应用程序之间的通信方法&#xff0c;消息队列在分布式系统开发中应用非常广泛。支持Windows、Linux/Unix、MA…

论文阅读_InP-Based_Generic_Foundry_Platform_for_Photonic_Integrated_Circuits

InP-Based_Generic_Foundry_Platform_for_Photonic_Integrated_Circuits 时间&#xff1a;2018年 作者&#xff1a;Luc M. Augustin, Member, IEEE, Rui Santos, Erik den Haan, Steven Kleijn, Peter J. A. Thijs, Sylwester Latkowski, Senior Member, IEEE, Dan Zhao, Wei…

计算机毕业设计 SpringBoot的一站式家装服务管理系统 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

探讨一下WebINFO 下的一些思考

在平时的开发中&#xff0c;我们经常看到一个/WEB-INF 这个目录&#xff0c;这个是web 容器初始化加载的一个标准路径。官方解释&#xff1a;WEB-INF 是 Java 的 web 应用的安全目录。所谓安全就是客户端无法访问&#xff0c;只有服务端可以访问的目录。也就是说&#xff0c;这…