题目一:

给定一个有序数组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++;
			}
		}
	}

最新文章

  1. Golang, 以17个简短代码片段,切底弄懂 channel 基础
  2. 我们公司的ASP.NET 笔试题,你觉得难度如何
  3. ipad pro 文章
  4. 研二下学期做的第一个项目(主要关于datagridview的一些笔记)
  5. String、StringBuffer、StringBuilder的区别
  6. CENTOS修改主机名
  7. Xcode7 网络请求报错
  8. Linux下安装MySQL5.6
  9. vs2012 aps.net4.0/4.5尚未在web服务器上注册
  10. jQuery多文件
  11. 【Android Developers Training】 36. 设置文件共享
  12. 过渡与动画 - steps调速函数&amp;CSS值与单位之ch
  13. js中的call()方法与apply()方法
  14. [算法&amp;数据结构]深度优先搜索(Depth First Search)
  15. ElasticSearch原理
  16. c++stack容器介绍
  17. Java开发各层对象专用名词含义 PO,VO,DAO,BO,DTO,POJO, BYO,Entity,JavaBean,JavaBeans
  18. 如何杀死oracle死锁进程
  19. php的常量
  20. PyCharm 自定义模版

热门文章

  1. 类中的internal成员可能是一种坏味道
  2. MySQL加入服务、设置password、改动password
  3. linux bash shell run ros launch file and multi_node
  4. Linux系统下如何监测磁盘的使用空间
  5. 捕获网络数据包并进行分析的开源库-WinPcap
  6. linux网络及防火墙配置命令
  7. CentOS: Make Command not Found and linux xinetd 服务不能启动
  8. 使用Percona监控插件监控MySQL
  9. 浏览器登录cookie
  10. python 基础 9.5 数据库连接池