283.移动零(力扣)-Java-快速排序-双指针
2022/1/16 17:35:05
本文主要是介绍283.移动零(力扣)-Java-快速排序-双指针,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
283.移动零(力扣)-Java-快速排序-双指针
先了解一下快速排序
1.从数组中选择一个元素值作为基准元素(通常选择第一个元素值-temp=nums[0])
2.设定起始位置-left -nums[0],末尾位置-right[n]
3.先从末尾 right 开始比较,大于基准数据则 right - -;小于基准数据则将 right 位置的值赋给 left 位置,再将 left ++
4.若 执行 left = right ,再从开始 left 开始比较,大于基准数据则将 left 位置值赋给 right 位置,再将 right - - ;小于基准数据则 left ++
5.若 执行 right = left,再从末尾 right 开始比较,大于基准数据则 right - -;小于基准数据则将 right 位置的值赋给 left 位置,再将 left ++
( 以此循环至 right = left ,此时 left 或 right 的位置就是基准数的位置 )关于快速排序更多详细信息点击这里
题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
1.双指针法
使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。
初始位置都为0,指向数组第一个元素。
右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。
public static void moveZeroes(int[] nums) { int n=nums.length; int left=0,right=0; while(right<n) { if(nums[right]!=0) { int temp=nums[left]; nums[left]=nums[right]; nums[right]=temp; left++; } right++; } }
这篇关于283.移动零(力扣)-Java-快速排序-双指针的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)