LeetCode Python题解(二)----排序
根据: githhub优秀创作者.
算法思想
1.双指针法
2.排序
3.贪心思想
4.二分查找
5.分冶
6.搜索
7.动态规划
8.数学
快速排序
用于求解 Kth Element 问题,也就是第 K 个元素的问题。
可以使用快速排序的 partition() 进行实现。需要先打乱数组,否则最坏情况下时间复杂度为 O(N2 )。
堆
用于求解 TopK Elements 问题,也就是 K 个最小元素的问题。可以维护一个大小为 K 的最小堆,最小堆中的元素就是最小元素。最小堆需要使用大顶堆来实现,大顶堆表示堆顶元素是堆中最大元素。这是因为我们要得到 k 个最小的元素,因此当遍历到一个新的元素时,需要知道这个新元素是否比堆中最大的元素更小,更小的话就把堆中最大元素去除,并将新元素添加到堆中。所以我们需要很容易得到最大元素并移除最大元素,大顶堆就能很好满足这个要求。
堆也可以用于求解 Kth Element 问题,得到了大小为 k 的最小堆之后,因为使用了大顶堆来实现,因此堆顶元素就是第 k 大的元素。
快速选择也可以求解 TopK Elements 问题,因为找到 Kth Element 之后,再遍历一次数组,所有小于等于 Kth Element 的元素都是 TopK Elements。
可以看到,快速选择和堆排序都可以求解 Kth Element 和 TopK Elements 问题。
1.数组中的第K个最大元素(215题)
题目描述:找到倒数第 k 个的元素。
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
1.1 排序:排序 :时间复杂度 O(NlogN),空间复杂度 O(1)
class Solution:def findKthLargest(self,nums,k):nums.sort()return nums[-k]
1.2 快速选择 :时间复杂度 O(N),空间复杂度 O(1)
思路:先使用快速排序的方法,再选出第K大的值
- 快排思想为选出一个基数,并且把基数的左右划分为两部分
- 再把左边部分进行二次快排
- 把右边进行二次快排
class Solution:def findKthLargest(self,nums,k):k = len(nums)-kself.quicksort(nums,0,len(nums)-1)return nums[k]def parttion(self,v, left, right): //划分key = v[left]low = lefthigh = rightwhile low < high:while (low < high) and (v[high] >= key):high -= 1v[low] = v[high]while (low < high) and (v[low] <= key):low += 1v[high] = v[low]v[low] = keyreturn lowdef quicksort(self,v, left, right):if left < right:p = self.parttion(v, left, right) //选出基数self.quicksort(v, left, p-1) //左边快排self.quicksort(v, p+1, right) //右边快排return v
荷兰国旗问题
荷兰国旗包含三种颜色:红、白、蓝。
有三种颜色的球,算法的目标是将这三种球按颜色顺序正确地排列。它其实是三向切分快速排序的一种变种,在三向切分快速排序中,每次切分都将数组分成三个区间:小于切分元素、等于切分元素、大于切分元素,而该算法是将数组分成三个区间:等于红色、等于白色、等于蓝色。
按颜色进行排序
题目描述:给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]
class Solution:def sortColors(self,nums):zero,one,two = -1,0,len(nums)while one < two:if nums[one] == 0:zero += 1nums[zero],nums[one] = nums[one],nums[zero]one += 1elif nums[one] == 2:two -= 1nums[two],nums[one] = nums[one],nums[two]else:one += 1
相关文章:

人生快乐之道(组图)
举报 转载于:https://www.cnblogs.com/qqnnhhbb/articles/1373323.html

Codeforces Round #270
Codeforces Round #270 题目链接 A:我是筛了下素数。事实上偶数仅仅要输出4和x - 4,奇数输出9和x - 9就可以 B:贪心的策略,把时间排序后。取每k个的位置 C:贪心。每次遇到一个人尽量让他用字典序小的,假设不…
Matlab与数据结构 -- 如何获取完整文件名
本图文介绍了Matlab中获取完整文件名的函数fullfile()。

用Git上传删除本地项目到gitlab---图文解析
Git简介 Git是目前世界上最先进的分布式版本控制系统 故事起源:如果你用Microsoft Word写过长篇大论,那你一定有这样的经历: 想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……

正常的人|正确的作息时间
正确的作息时间 标签:健康/保健 分类:美容护肤晚上9点——11点为免疫系统(淋巴)排毒时间。此时间应安静或听音乐 晚间11点——凌晨1点,肝的排毒时间,需在熟睡中进行凌晨1点——3点,胆的排毒时间…
基于Matlab的BP神经网络在语音特征信号识别中的应用
本微信图文详细介绍了BP神经网络在语音特征信号中的应用,并给出了Matlab源码。

DSSM(DEEP STRUCTURED SEMANTIC MODELS)
Huang, Po-Sen, et al. "Learning deep structured semantic models for web search using clickthrough data." Proceedings of the 22nd ACM international conference on Conference on information & knowledge management. ACM, 2013. 该网络把两个不同的输…

TCP和UDP传输特点
1.1TCP传输特点: 端到端通信:客户应用程序在一端,服务器在另一端建立可靠连接:建立连接时会测试网络的连通性可靠交付:建立连接后会发送数据是可靠的,除非因为故障而不能可靠交付,发送方会得到…

css3之 渐变
CSS3 渐变(gradients)可以让你在两个或多个指定的颜色之间显示平稳的过渡。 以前,你必须使用图像来实现这些效果。但是,通过使用 CSS3 渐变(gradients),你可以减少下载的事件和宽带的使用。此外…

CRM:把 isv.config.xml 按钮事件移动到 entity.onload()
大家都知道在ISV.CONFIG里可以添加按钮,然后添加按钮事件,比如下面: <Entities><Entity name"account"><ToolBar ValidForCreate"0"ValidForUpdate"1"><Button Icon"/_imgs/ico_18_…
Matlab与线性代数 -- 均匀分布的随机矩阵
本微信图文详细介绍了Matlab中均匀分布的随机矩阵函数rand、rands、randperm。

pytest实战--参数化parametrize+前置fixture
文章目录参数化 parametrize适用场景一个典型的例子前置fixture参数化适用场景一个典型的例子示例2个人疑问?pytest既可以用来做单元测试,也可以用来做自动化接口测试,pytest可以结合allure生成漂亮的测试报告,经过一段时间的学习…
Matlab与机器学习 -- BP网络神经元上的转移函数
本图文详细介绍了BP神经网络常用的转移函数及其导数,单极性Sigmoid函数,双极性Sigmoid函数,线性函数。

在baidu上找到自己
在baidu上搜了我经常用的用户名,找到了这里,一看都满屋子都是灰尘,我打扫了一下。也清理了自己。发现那时的自己好冲动、好小孩。 其实现在也一样。我不想去否认自己的过去,但也不想公开这段过去。因为它在这个废弃的屋子里很安静…

selenium--iframe之模拟qq空间登录
文章目录前言分析切换iframe前言 我在模拟登录qq的时候,发现无论如何都定位不了qq的“账号密码登录”,怎么都进不去qq的登录页面,如下图所示 分析 打开 https://qzone.qq.com/然后点击二维码登录这块,背景出现了灰色ÿ…

Java读取Properties配置文件
目录1.Properties类与Properties配置文件2.Properties中的主要方法3.示例1.Properties类与Properties配置文件Properties类继承自Hashtable类并且实现了Map接口,使用键值对的形式来保存属性集。不过Properties的键和值都是字符串类型。2.Properties中的主要方法(1)l…
《C#精彩实例教程》小组阅读02 – Visual Studio简介与安装
本图文详细介绍了什么是Visual Studio,以及Visual Studio的安装过程。 上一次我们介绍了Visual Studio 2015的下载,以及MSDN。 这一次,我们说说什么是Visual Studio以及如何安装。 Visual Studio(简称VS)是微软公司…

从.NET寻找出路
自从成了金融危机的牺牲品之后,一直在寻找出路. 从.NET开发人员 到 待业青年, 再到现在的 技术支持,有些茫然,不知道未来在哪里!! 工作一年半,发现给别人打工没啥发展,…

关于高速光耦6n137的使用总结_光耦使用中的那点事1
目前通用的隔离器件有光耦、变压器隔离、电容耦合等三大主流方式。其中光耦和变压器隔离使用的较多,有很多地方都可以见到。本次推送主要介绍光电耦合器的几个使用注意事项,以下截图数据来源于TLP785的数据手册。1、延时时间大家可以看到在5V供电情况下&…

javascript回调函数笔记
来源于:https://github.com/useaname/blog-study 在Javascript中,函数是第一类对象。意味函数可以像对象一样按照第一类被管理使用。回调函数是从一个叫函数式编程的编程范式中衍生出来的概念。简单来说,函数式编程就是使用函数作为变量。函数…

工厂方法模式与抽象工厂模式的区别
工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具…
LSGO代码小组第18周复盘日志
LSGO软件技术团队第18周代码小组学习复盘日志。

唐山松下焊接机器人编程招聘_机器人四小家族-松下Panasonic专注焊接
在日本松下的网站,机器人是和焊接系统方案是在一起的。松下机器人的历史(来源于松下公司网站)1980年松下AW系列弧焊机器人投放上市,机器人系统之间采用的是单向模拟通讯方式模拟通讯的机器人1983年示教的容易化1988年减少干涉的设…
基于Matlab的BP神经网络在非线性函数拟合中的应用
本图文详细介绍了如何利用Matlab神经网络工具箱实现BP神经网络对非线性函数的拟合。

aligned_storage简单学习
#include <iostream> #include <type_traits> #include <string>/* template< std::size_t Len, std::size_t Align default-alignment >struct::type aligned_storage; 相当于一个内建的POD类型他的大小是Size他的对齐方式是Align */ template<c…

有关高级关系引擎中存在错误
SQL server2005 Analysis Services项目中出现以下错误 高级关系引擎中存在错误。 无法与 DataSourceID 为“Adventure Works DW”、名称为“Adventure Works DW”的数据源建立连接。 但是数据源测试连接是好使的,搜到已解决办法,数据源对里双击…

c#中接口的使用方法图解_C#图解教程 第十五章 接口
接口什么是接口接口是指定一组函数成员而不实现它们的引用类型。所以只能类和结构来实现接口。这种描述比较抽象,直接来看个示例。下例中,Main方法创建并初始化了一个CA类的对象,并将该对象传递给PrintInfo方法。classCA{public stringName;p…

提高C#编程水平的50个要点
1.总是用属性 (Property) 来代替可访问的数据成员 2.在 readonly 和 const 之间,优先使用 readonly 3.在 as 和 强制类型转换之间,优先使用 as 操作符 4.使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if 5.总是为自定义类重载 ToString 方…

1.6 INSERT语句
1.6 INSERT语句正在更新内容,请稍后
基于Matlab的多层BP神经网络在非线性函数拟合中的应用
本图文详细介绍了如何利用Matlab神经网络工具箱实现多层BP神经网络对非线性函数的拟合。