Coding Interview Guide -- 数组的partition调整
【题目】
给定一个有序数组arr,调整arr使得这个数组的左半部分没有重复元素且升序,而不用保证右部分是否有序
例如,arr=[1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 8, 9],调整之后arr=[1, 2, 3, 4, 5, 6, 7, 8 ,9, ...]
【要求】
时间复杂度为O(N),额外空间复杂度为O(1)
1 public void leftUniqueSort(int[] arr) 2 { 3 if(arr == null || arr.length < 2) 4 { 5 return; 6 } 7 8 int left = 0; 9 int cur = 1; 10 11 while(cur != arr.length) 12 { 13 if(arr[cur] != arr[left]) 14 { 15 swap(arr, ++left, cur); 16 } 17 cur++; 18 } 19 }
【题目】
给定一个数组arr,其中只可能含有0、1、2三个值,请实现arr的排序
【要求】
时间复杂度为O(N),额外空间复杂度为O(1)
1 public void sort(int[] arr) 2 { 3 if(arr == null || arr.length < 2) 4 { 5 return; 6 } 7 8 int left = -1; 9 int index = 0; 10 int right = arr.length; 11 12 while(index < right) 13 { 14 if(arr[index] == 0) 15 { 16 swap(arr, ++left, index++); 17 } 18 else if(arr[index] == 2) 19 { 20 swap(arr, index, --right); 21 } 22 else 23 { 24 index++; 25 } 26 } 27 }
【题目】
有一个数组arr,给定一个值k,实现比k小的数都放在数组的左边,等于k的数都放在数组的中间,大于k的数都放在数组的右边
【要求】
时间复杂度为O(N),额外空间复杂度为O(1)
1 public void sort(int[] arr, int k) 2 { 3 if(arr == null || arr.length < 2) 4 { 5 return; 6 } 7 8 int left = -1; 9 int index = 0; 10 int right = arr.length; 11 12 while(index < right) 13 { 14 if(arr[index] < k) 15 { 16 swap(arr, ++left, index++); 17 } 18 else if(arr[index] > k) 19 { 20 swap(arr, index, --right); 21 } 22 else 23 { 24 index++; 25 } 26 } 27 }
1 public void swap(int[] arr, int i, int j) 2 { 3 int temp = arr[i]; 4 arr[i] = arr[j]; 5 arr[j] = temp; 6 }
来源:左程云老师《程序员代码面试指南》
转载于:https://www.cnblogs.com/latup/p/10943598.html
Coding Interview Guide -- 数组的partition调整相关推荐
- 数组的partition调整
题目: 给定一个有序数组arr,调整arr使得这个数组的左边部分没有重复元素且升序,而不用保证右半部分是否有序. 例如,arr = [1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, ...
- Coding Interview Guide -- 翻转字符串
[题目] 给定一个字符类型的数组chas,请在单词间做逆序调整.只要做到单词顺序逆序即可,对空格的位置没有特别要求 举例,如果把chas看作字符串为"dog loves pig", ...
- 算法总结之 数组的partition调整
给定一个有序数组arr, 调整arr使得这个数组的左半部分没有重复元素且升序,而且不用保证右边是否有序 分区就ok了 u区是 无重复且升序的 u是这个区域的最后位置,初始u=0 i做从左到右的遍历, ...
- Coding Interview Guide -- 向有序的环形单链表中插入新节点
[题目] 一个环形单链表从头节点head开始不降序,同时由最后的节点指回头节点.给定这样一个环形单链表的头节点head和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后 ...
- Coding Interview Guide -- 括号字符串的有效性和最长有效长度
[题目] 给定一个字符串str,判断是不是整体有效的括号字符串 举例,str = "()",返回true:str = "(()())",返回true:str = ...
- Coding Interview University学习
Coding Interview University学习 转自作者:约翰·沃斯塔姆, 简介:https://startupnextdoor.com/ive-been-acquired-by-amaz ...
- 渣基础:比照Hawstein学Cracking the coding interview(1)
<C++ Primer 第五版>书实在是太长,太厚了.总是看了十几页就看累了,坚持不了多久,想了想还是别勉强自己,决定把它当工具书查看,或者积累足够的C++经验后再翻阅一遍. 目前的打算是 ...
- python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...
python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...
- [译]1-Key-Value Coding Programming Guide 官方文档第一部分
Key-Value Coding Programming Guide 官方文档第一部分 2018.9.20 第一次修正 iOS-KVC官方文档第一部分 Key-Value Coding Program ...
最新文章
- python系统问题
- arc diff 指定版本号_Phabricator客户端安装
- ETSI MEC — 面向边缘计算的 5G 增强技术探讨
- laravel上传文件报错:413 Request Entity Too Large
- python【蓝桥杯vip练习题库】ADV-313字符串顺序比较
- python3下载文件-在Python 3中从Web下载文件
- C++longest palindromic subsequence最长回文子序列算法实现(附完整源码)
- oracle学习--循环语句
- 安卓系统双屏异显_Android 双屏异显实现的三种方式
- [刷题]算法竞赛入门经典(第2版) 4-1/UVa1589 - Xiangqi
- 从人与世界的关系上来看,人其实分为两部分
- 【CSS3】纯CSS代码实现模拟时钟,+js对时功能。
- jd-gui - 打开jar出现中文乱码问题
- NIPS 2016 Tutorial:Generative Adversarial Networks学习记录
- Fuchsia编译与真机安装
- vue中EventBus的实现原理
- 如何设置Parallels Desktop,让Windows更加好用
- 个人博客标签和文章的表结构设计
- 新一年涨工资指南:AI薪资水平和就业前景分析(一定要看完!)
- mysql 军规_在互联网大厂必须遵守的MySql开发军规