当前位置: 首页 > 编程日记 > 正文

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
荷兰国旗问题

荷兰国旗包含三种颜色:红、白、蓝。

有三种颜色的球,算法的目标是将这三种球按颜色顺序正确地排列。它其实是三向切分快速排序的一种变种,在三向切分快速排序中,每次切分都将数组分成三个区间:小于切分元素、等于切分元素、大于切分元素,而该算法是将数组分成三个区间:等于红色、等于白色、等于蓝色。

Alt

按颜色进行排序

题目描述:给定一个包含红色、白色和蓝色,一共 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&#xff1a;我是筛了下素数。事实上偶数仅仅要输出4和x - 4&#xff0c;奇数输出9和x - 9就可以 B&#xff1a;贪心的策略&#xff0c;把时间排序后。取每k个的位置 C&#xff1a;贪心。每次遇到一个人尽量让他用字典序小的&#xff0c;假设不…

Matlab与数据结构 -- 如何获取完整文件名

本图文介绍了Matlab中获取完整文件名的函数fullfile()。

用Git上传删除本地项目到gitlab---图文解析

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

正常的人|正确的作息时间

正确的作息时间 标签&#xff1a;健康/保健 分类&#xff1a;美容护肤晚上9点——11点为免疫系统&#xff08;淋巴&#xff09;排毒时间。此时间应安静或听音乐 晚间11点——凌晨1点&#xff0c;肝的排毒时间&#xff0c;需在熟睡中进行凌晨1点——3点&#xff0c;胆的排毒时间…

基于Matlab的BP神经网络在语音特征信号识别中的应用

本微信图文详细介绍了BP神经网络在语音特征信号中的应用&#xff0c;并给出了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传输特点&#xff1a; 端到端通信&#xff1a;客户应用程序在一端&#xff0c;服务器在另一端建立可靠连接&#xff1a;建立连接时会测试网络的连通性可靠交付&#xff1a;建立连接后会发送数据是可靠的&#xff0c;除非因为故障而不能可靠交付&#xff0c;发送方会得到…

css3之 渐变

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

CRM:把 isv.config.xml 按钮事件移动到 entity.onload()

大家都知道在ISV.CONFIG里可以添加按钮&#xff0c;然后添加按钮事件&#xff0c;比如下面&#xff1a; <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个人疑问&#xff1f;pytest既可以用来做单元测试&#xff0c;也可以用来做自动化接口测试&#xff0c;pytest可以结合allure生成漂亮的测试报告&#xff0c;经过一段时间的学习…

Matlab与机器学习 -- BP网络神经元上的转移函数

本图文详细介绍了BP神经网络常用的转移函数及其导数&#xff0c;单极性Sigmoid函数&#xff0c;双极性Sigmoid函数&#xff0c;线性函数。

在baidu上找到自己

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

selenium--iframe之模拟qq空间登录

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

Java读取Properties配置文件

目录1.Properties类与Properties配置文件2.Properties中的主要方法3.示例1.Properties类与Properties配置文件Properties类继承自Hashtable类并且实现了Map接口&#xff0c;使用键值对的形式来保存属性集。不过Properties的键和值都是字符串类型。2.Properties中的主要方法(1)l…

《C#精彩实例教程》小组阅读02 – Visual Studio简介与安装

本图文详细介绍了什么是Visual Studio&#xff0c;以及Visual Studio的安装过程。 上一次我们介绍了Visual Studio 2015的下载&#xff0c;以及MSDN。 这一次&#xff0c;我们说说什么是Visual Studio以及如何安装。 Visual Studio&#xff08;简称VS&#xff09;是微软公司…

从.NET寻找出路

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

关于高速光耦6n137的使用总结_光耦使用中的那点事1

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

javascript回调函数笔记

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

工厂方法模式与抽象工厂模式的区别

工厂方法模式&#xff1a; 一个抽象产品类&#xff0c;可以派生出多个具体产品类。 一个抽象工厂类&#xff0c;可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式&#xff1a; 多个抽象产品类&#xff0c;每个抽象产品类可以派生出多个具…

LSGO代码小组第18周复盘日志

LSGO软件技术团队第18周代码小组学习复盘日志。

唐山松下焊接机器人编程招聘_机器人四小家族-松下Panasonic专注焊接

在日本松下的网站&#xff0c;机器人是和焊接系统方案是在一起的。松下机器人的历史&#xff08;来源于松下公司网站&#xff09;1980年松下AW系列弧焊机器人投放上市&#xff0c;机器人系统之间采用的是单向模拟通讯方式模拟通讯的机器人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”的数据源建立连接。 但是数据源测试连接是好使的&#xff0c;搜到已解决办法&#xff0c;数据源对里双击&#xf…

c#中接口的使用方法图解_C#图解教程 第十五章 接口

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

提高C#编程水平的50个要点

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

1.6 INSERT语句

1.6 INSERT语句正在更新内容&#xff0c;请稍后

基于Matlab的多层BP神经网络在非线性函数拟合中的应用

本图文详细介绍了如何利用Matlab神经网络工具箱实现多层BP神经网络对非线性函数的拟合。