[算法]数组的partition调整
2024-09-04 18:16:50
题目一:
给定一个有序数组arr,调整arr使得这个数组的左半部分没有重复部分且升序,而不用保证右部分是否有序。
例如:arr=[1,2,2,2,3,3,4,5,6,6,7,7,8,8,9,9],调整之后arr=[1,2,3,4,5,6,7,8,9…]。
要求:
时间复杂度O(N),额外空间复杂度O(1)
程序:
public static void leftUnique(int[] arr) {if (arr == null || arr.length < 2) {return;}int u = 0;int i = 1;while (i != arr.length) {if (arr[i++] != arr[u]) {swap(arr, ++u, i - 1);}}}
题目二:
给定一个数组arr,其中只可能含有0、1、2三个值,请实现arr的排序。
另外一种问法:有一个数组,其中只有红球、篮球和黄球,请实现红球全放在数组的左边,篮球放在中间,黄球放在右边。
另外一种问法:有一个数组,再给定一个值K,请实现比K小的数都放在数组的左边,等于K的值都放在数组的中间,比K大的数都放在数组的右边。
程序:
public static void sort(int[] arr) {if (arr == null || arr.length < 2) {return;}int left = -1;int index = 0;int right = arr.length;while (index < right) {if (arr[index] == 0) {swap(arr, ++left, index++);} else if (arr[index] == 2) {swap(arr, index, --right);} else {index++;}}}
最新文章
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
- 我们公司的ASP.NET 笔试题,你觉得难度如何
- ipad pro 文章
- 研二下学期做的第一个项目(主要关于datagridview的一些笔记)
- String、StringBuffer、StringBuilder的区别
- CENTOS修改主机名
- Xcode7 网络请求报错
- Linux下安装MySQL5.6
- vs2012 aps.net4.0/4.5尚未在web服务器上注册
- jQuery多文件
- 【Android Developers Training】 36. 设置文件共享
- 过渡与动画 - steps调速函数&;CSS值与单位之ch
- js中的call()方法与apply()方法
- [算法&;数据结构]深度优先搜索(Depth First Search)
- ElasticSearch原理
- c++stack容器介绍
- Java开发各层对象专用名词含义 PO,VO,DAO,BO,DTO,POJO, BYO,Entity,JavaBean,JavaBeans
- 如何杀死oracle死锁进程
- php的常量
- PyCharm 自定义模版