leetcode:75颜色分类(3way)、215数组中的第K个最大元素(normal)

3way

private static void quick3waySort(int[] arr, int left, int hi) {
if (lo >= hi) return; // 注意大于等于 int mid = left + (right - left) / 2;
swap(arr, lo, mid); int val = arr[lo];
// lt表示等于val的,lt-1才是小于val的位置
// gt表示还没比较的位置,但gt+1就是大于val的
int lt = lo, gt = hi;
int i = lo + 1;
while (i <= gt) {
if (arr[i] < val) swap(arr, lt++, i++); // nums[i] == 0 颜色分类
else if (arr[i] > val) swap(arr, i, gt--); // nums[p] == 2 颜色分类
else i++;
} quick3waySort(arr, lo, lt - 1);
quick3waySort(arr, gt + 1, hi);
}

normal

注意这里用for循环!!!

public int findKthLargest(int[] nums, int k) {
// 左右指针,调整k
int left = 0, right = nums.length - 1, n = nums.length - k, rank = 0;
// 遍历,下面写法与二分查找十分相像
while (right >= left){
// 比较partition结果调整指针
rank = partition(nums, left, right);
if (rank < n){
left = rank + 1;
} else if (rank > n){
right = rank - 1;
} else {
break;
}
}
return nums[rank];
} // partition函数
private int partition(int[] nums, int left, int right){
// 设置mid,保存mid值pivot,lt指针
int mid = left + (right - left) / 2, val = nums[mid], lt = left;
// 交换mid与right
swap(nums, mid, right);
// 遍历
for (int i = left; i < right; i++){
// 如果小于pivot,就掉到前面,lt++
if (nums[i] < val){
swap(nums, lt, i);
lt++;
}
} // 交换pivot和lt
swap(nums, lt, right);
// 返回lt
return lt;
}

leetcode快排相关的更多相关文章

  1. 待字闺中之快排单向链表;leetcode之Sort List

    题目来源.待字闺中.原创@陈利人 .欢迎大家继续关注微信公众账号"待字闺中" 分析:思路和数据的高速排序一样,都须要找到一个pivot元素.或者节点. 然后将数组或者单向链表划分为 ...

  2. LeetCode 75. Sort Colors (颜色分类):三路快排

    Given an array with n objects colored red, white or blue, sort them in-place so that objects of the ...

  3. 数组第K小数问题 及其对于 快排和堆排 的相关优化比较

    题目描述 给定一个整数数组a[0,...,n-1],求数组中第k小数 输入描述 首先输入数组长度n和k,其中1<=n<=5000, 1<=k<=n 然后输出n个整形元素,每个数 ...

  4. leetcode 75 Sort Colors 计数排序,三路快排

    解法一:计数排序:统计0,1,2 的个数 时间复杂度:O(n) 空间复杂度:O(k)    k为元素的取值范围, 此题为O(1) class Solution { public: void sortC ...

  5. LeetCode 75. Sort Colors (python一次遍历,模拟三路快排)

    LeetCode 75. Sort Colors (python一次遍历,模拟三路快排) 题目分析: 本题需要实现数字只包含0,1,2的排序,并且要求一次遍历. 由于只用把数字隔离开,很容易想到快排的 ...

  6. [剑指Offer]39-数组中出现次数超过一半的数字(快排延申,找第k大数同理)

    题目链接 https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163?tpId=13&tqId=11181&t ...

  7. 如何用快排思想在O(n)内查找第K大元素--极客时间王争《数据结构和算法之美》

    前言 半年前在极客时间订阅了王争的<数据结构和算法之美>,现在决定认真去看看.看到如何用快排思想在O(n)内查找第K大元素这一章节时发现王争对归并和快排的理解非常透彻,讲得也非常好,所以想 ...

  8. Java基础进阶:APi使用,Math,Arrarys,Objects工具类,自动拆装箱,字符串与基本数据类型互转,递归算法源码,冒泡排序源码实现,快排实现源码,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    要点摘要 Math: 类中么有构造方法,内部方法是静态的,可以直接类名.方式调用 常用: Math.abs(int a):返回参数绝对值 Math.ceil(double a):返回大于或等于参数的最 ...

  9. 【PHP数据结构】交换排序:冒泡、快排

    上篇文章中我们好好地学习了一下插入类相关的两个排序,不过,和交换类的排序对比的话,它们真的只是弟弟.甚至可以说,在所有的排序算法中,最出名的两个排序都在今天要介绍的交换排序中了.不管是冒泡.还是快排, ...

随机推荐

  1. Java排序算法全

    目录 Java排序算法代码 零. 排序基类 一. 选择排序 二. 插入排序 三. 希尔排序 四. 归并排序 1. 自顶向下 2. 自底向上 五. 快速排序 1. 基本版 2. 双路切分版 3. 三路切 ...

  2. 一个简单的java年龄计算器

    制作一个如下图年龄计算器 根据题目,我做了一个由Calendar类以及年月日各相减得到的年龄,当然正确的方法不止一个,以下为我的源代码和结果截图: package com.Date; import j ...

  3. mysql如何将一个字段多个类型串成一个字符串?

    结论 先说结论,可以使用group_concat group by的组合实现多行变一行,将一个字段的多个类型串成一个字段 需求: 如题,一个字段如电影类别,一部电影可以是多个类别,如喜剧.动作片等,其 ...

  4. (C/C++学习)23.C++中指针的长度

    引言:先看下面一个程序会打印出什么? #include<iostream> using namespace std; int main() { int a = 2; int *p = &a ...

  5. 这几道Java集合框架面试题在面试中几乎必问

    Arraylist 与 LinkedList 异同 1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全: 2. 底层数据结构: Arraylis ...

  6. buf.readUInt16BE()

    buf.readUInt16BE(offset[, noAssert]) buf.readUInt16LE(offset[, noAssert]) offset {Number} 0 <= of ...

  7. 文件内容差异对比-python

    上次没精力时候,看了下python自动化运维,给print加了颜色,新鲜哒 今天来写写文件对比 step1:引入difflib库(无需安装,python自带) step2:将文件内容按行分割,spli ...

  8. 类中的普通方法伪装成属性 @property

    class P: def __init__(self,name,age): self.name=name if type(age) is int: self.__age=age else: print ...

  9. rm -rf & node

    rm -rf & node rm -rf $ rm -rf mydir https://www.computerhope.com/issues/ch000798.htm https://sta ...

  10. POJ 2065 高斯消元求解问题

    题目大意: f[k] = ∑a[i]*k^i % p 每一个f[k]的值就是字符串上第 k 个元素映射的值,*代表f[k] = 0 , 字母代表f[k] = str[i]-'a'+1 把每一个k^i求 ...