题目

  给定一个有序数组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调整相关推荐

  1. 数组的partition调整

    题目: 给定一个有序数组arr,调整arr使得这个数组的左边部分没有重复元素且升序,而不用保证右半部分是否有序.  例如,arr = [1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, ...

  2. Coding Interview Guide -- 翻转字符串

    [题目] 给定一个字符类型的数组chas,请在单词间做逆序调整.只要做到单词顺序逆序即可,对空格的位置没有特别要求 举例,如果把chas看作字符串为"dog loves pig", ...

  3. 算法总结之 数组的partition调整

    给定一个有序数组arr, 调整arr使得这个数组的左半部分没有重复元素且升序,而且不用保证右边是否有序 分区就ok了 u区是 无重复且升序的  u是这个区域的最后位置,初始u=0 i做从左到右的遍历, ...

  4. Coding Interview Guide -- 向有序的环形单链表中插入新节点

    [题目] 一个环形单链表从头节点head开始不降序,同时由最后的节点指回头节点.给定这样一个环形单链表的头节点head和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后 ...

  5. Coding Interview Guide -- 括号字符串的有效性和最长有效长度

    [题目] 给定一个字符串str,判断是不是整体有效的括号字符串 举例,str = "()",返回true:str = "(()())",返回true:str = ...

  6. Coding Interview University学习

    Coding Interview University学习 转自作者:约翰·沃斯塔姆, 简介:https://startupnextdoor.com/ive-been-acquired-by-amaz ...

  7. 渣基础:比照Hawstein学Cracking the coding interview(1)

    <C++ Primer 第五版>书实在是太长,太厚了.总是看了十几页就看累了,坚持不了多久,想了想还是别勉强自己,决定把它当工具书查看,或者积累足够的C++经验后再翻阅一遍. 目前的打算是 ...

  8. python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...

    python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...

  9. [译]1-Key-Value Coding Programming Guide 官方文档第一部分

    Key-Value Coding Programming Guide 官方文档第一部分 2018.9.20 第一次修正 iOS-KVC官方文档第一部分 Key-Value Coding Program ...

最新文章

  1. python系统问题
  2. arc diff 指定版本号_Phabricator客户端安装
  3. ETSI MEC — 面向边缘计算的 5G 增强技术探讨
  4. laravel上传文件报错:413 Request Entity Too Large
  5. python【蓝桥杯vip练习题库】ADV-313字符串顺序比较
  6. python3下载文件-在Python 3中从Web下载文件
  7. C++longest palindromic subsequence最长回文子序列算法实现(附完整源码)
  8. oracle学习--循环语句
  9. 安卓系统双屏异显_Android 双屏异显实现的三种方式
  10. [刷题]算法竞赛入门经典(第2版) 4-1/UVa1589 - Xiangqi
  11. 从人与世界的关系上来看,人其实分为两部分
  12. 【CSS3】纯CSS代码实现模拟时钟,+js对时功能。
  13. jd-gui - 打开jar出现中文乱码问题
  14. NIPS 2016 Tutorial:Generative Adversarial Networks学习记录
  15. Fuchsia编译与真机安装
  16. vue中EventBus的实现原理
  17. 如何设置Parallels Desktop,让Windows更加好用
  18. 个人博客标签和文章的表结构设计
  19. 新一年涨工资指南:AI薪资水平和就业前景分析(一定要看完!)
  20. mysql 军规_在互联网大厂必须遵守的MySql开发军规

热门文章

  1. K8S批量scale deploy的副本为0,结合xargs -I使用
  2. flume数据采集:js埋点
  3. Django 3.2.5博客开发教程:实现网站首页
  4. containerd安装及常用命令
  5. docker数据卷volume详解
  6. Openresty 预编译安装教程
  7. matlab rebit,BIM的算法最新消息!MATLAB被禁也有BIM开源工具用!
  8. 查看systemctl或service启动服务日志
  9. 微信支付分申请接入流程
  10. gradle全局使用阿里云镜像