LeetCode算法题-Move Zeroes(Java实现-三种解法)
这是悦乐书的第201次更新,第211篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第67题(顺位题号是283)。给定一个数组nums,写一个函数将所有0移动到它的末尾,同时保持非零元素的相对顺序。例如:
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
注意:
您必须在不制作数组副本的情况下就地执行此操作。
最小化操作总数。
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 第一种解法
借助一个新数组和计数变量count,将不为0的数先存入新数组,然后将新数组中前count位赋值给数组的对应位,再将剩下的全赋值为0即可。
此解法的时间复杂度是O(n),空间复杂度是O(n)。
public void moveZeroes(int[] nums) {
if (nums == null || nums.length == 0) {
return ;
}
int[] newnums = new int[nums.length];
int count = 0;
for (int i=0; i<nums.length; i++) {
if (nums[i] != 0) {
newnums[count] = nums[i];
count++;
}
}
for (int j=0; j<nums.length; j++) {
if (j < count) {
nums[j] = newnums[j];
} else {
nums[j] = 0;
}
}
}
03 第二种解法
借用冒泡排序的思路,如果当前元素不等于0,就与前面的元素进行交换,这其中要借助一个变量指针来帮助我们完成交换的工作。
此解法的时间复杂度是O(n),空间复杂度是O(1)。
public void moveZeroes2(int[] nums) {
if (nums == null || nums.length == 0) {
return ;
}
int index = 0;
for(int i=0; i < nums.length; i++) {
if (nums[i] != 0) {
int temp = nums[index];
nums[index] = nums[i];
nums[i] = temp;
index++;
}
}
}
04 第三种解法
我们可以先将不等于0的元素放到数组的前面,这需要借助一个局部变量,一个从0开始的指针。然后再将剩下索引所对应的元素全部赋值为0。
此解法的时间复杂度是O(n),空间复杂度是O(1)。
public void moveZeroes3(int[] nums) {
if (nums == null || nums.length == 0) {
return ;
}
int index = 0;
for (int num : nums) {
if (num != 0) {
nums[index++] = num;
}
}
for (int i=index; i<nums.length; i++) {
nums[i] = 0;
}
}
05 小结
算法专题目前已连续日更超过一个月,算法题文章67+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-Move Zeroes(Java实现-三种解法)的更多相关文章
- LeetCode算法题-First Bad Version(Java实现-三种解法)
这是悦乐书的第200次更新,第210篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第66题(顺位题号是278).您是产品经理,目前领导团队开发新产品.不幸的是,您产品的最 ...
- LeetCode算法题-Heaters(Java实现)
这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...
- LeetCode算法题-Sqrt(Java实现)
这是悦乐书的第158次更新,第160篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第17题(顺位题号是69). 计算并返回x的平方根,其中x保证为非负整数. 由于返回类型 ...
- LeetCode算法题-Intersection of Two Linked Lists(Java实现)
这是悦乐书的第178次更新,第180篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第37题(顺位题号是160).编写程序以找到两个单链表交叉的节点.例如: 以下两个链表: ...
- LeetCode算法题-Factorial Trailing Zeroes(Java实现)
这是悦乐书的第183次更新,第185篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第42题(顺位题号是172).给定一个整数n,返回n!中的尾随零数.例如: 输入:3 输 ...
- LeetCode算法题-Subdomain Visit Count(Java实现)
这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...
- LeetCode算法题-Number of Lines To Write String(Java实现)
这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...
- LeetCode算法题-Unique Morse Code Words(Java实现)
这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...
- LeetCode算法题-Rotate String(Java实现)
这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...
随机推荐
- centos7修改网卡名称为eth0-技术流ken
前言 在配置集群的时候,需要保持网卡名称一致,所以我们需要修改centos7中的网卡名称为eth0. 检查网卡 检查网卡,现在网卡名称是ens33 [root@localhost ~]# ip a : ...
- [PHP] 算法-字符串的左循环的PHP实现
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abcXYZde ...
- 32.QT-制作最强电压电阻表盘,可以自定义阴影效果,渐变颜色,图标,文字标签等-附带demo程序
由于上位机需要绘制电压电阻表盘,如下图所示: 后来,在网上找阿找,还是没找到满意的,索性自己来画控件算了,由于第一次画控件,所以花了我2天时间,才画好 效果图如下: 上图的所有颜色(包括滑动的渐变/单 ...
- 21.QT-QTreeWidget,QTabWidget
QTreeWidget树形列表 设置标签相关函数 void QTreeWidget::setHeaderItem (QTreeWidgetItem * item ); void QTreeWidget ...
- 【Java每日一题】20170221
20170220问题解析请点击今日问题下方的“[Java每日一题]20170221”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; public cla ...
- 【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo
linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, ---------- ...
- ApplicationListener详解
ApplicationListener详解 ApplicationListener可以监听某个事件event 通过实现这个接口,传入一个泛型事件,在run方法中就可以监听这个事件,从而做出一定的逻辑 ...
- cloudera manager 安装配置
前面cloudera manager 环境准备和安装我参考的是: https://blog.csdn.net/m0_38017084/article/details/82218559 这篇博客,写的非 ...
- 向后台提交数据:通过form表单提交数据需刷新网页 但通过Ajax提交数据不用刷新网页可通过原生态Ajax或jqueryAjax。Ajax代码部分
原生态Ajax提交表单:需要借助XMLHttpRequest对象的open,要收通过post发送请求还要setRequsetHeader,然后把数据发送给后端,代码如下 目录结构 index.py代码 ...
- js 移动端上拉刷新(基于ng1)
//分页下拉 var ajaxScroll = function() { var screenHeight = window.screen.height; $(document).scroll(fun ...