算法
文章平均质量分 88
樱满无门
这个作者很懒,什么都没留下…
展开
-
Leetcode 1383 最大的团队表现值(贪心)
Leetcode 1383 最大的团队表现值(贪心)题目公司有编号为 1 到 n 的 n 个工程师,给你两个数组 speed 和 efficiency ,其中 speed[i] 和 efficiency[i] 分别代表第 i 位工程师的速度和效率。请你返回由最多 k 个工程师组成的 最大团队表现值 ,由于答案可能很大,请你返回结果对 10^9 + 7 取余后的结果。团队表现值 的定义为:一个团队中「所有工程师速度的和」乘以他们「效率值中的最小值」。示例 1:输入:n = 6, spee原创 2021-01-04 14:02:55 · 384 阅读 · 0 评论 -
排序算法——快速排序
快速排序快速排序 是整个排序算法中速度最快的,也是我所要介绍的最后一种排序方式。它以O(nlgn)O(n\lg n)O(nlgn)的速度雄踞最快的排序方式,并应用在了多种语言中,例如C语言的qsort、C++的sort等,并且局限很小。接下来介绍 快速排序 的主要原理。原理介绍快速排序的主要思想是分治思想(Divide and ConquerMethod)。基本原理是:从数列中取出一个基准数将比这个数大的数字放在它的右边,小于或等于它的数放在它的左边对左右区间重复第二步,直至各个区间只原创 2020-12-16 00:08:40 · 193 阅读 · 0 评论 -
排序算法——基数排序
基数排序基数排序是计数排序的一种改进。计数排序使用一个很长的一维数组进行信息的存储,而基数排序使用一个很大的二维数组进行存储,数组的大小是10*n。10代表十进制,n代表十进制的位数。基数排序的英语是,Least Significant Digit First。又称LSD,从名字就可以看出来,它是从数字的最低位即基位开始进行计算的,比较的趟数是最大数字的位数。而与计数排序最大的不同是,基数排序的对象可以是负数,也可以很大。负数的解决方案:将负数去符号后放在另一个数组中。基本思路:首先计算出数原创 2020-12-16 00:07:19 · 551 阅读 · 0 评论 -
排序算法——计数排序
计数排序计数排序 是一种线性时间复杂度的算法按照理论分析,基于比较的排序算法,时间复杂度的下限是O(nlnn)O(n\ln n)O(nlnn)虽然我也不知道怎么分析出来的,但是确实,不论是快速排序、归并排序、堆排序,它们的时间复杂度都是O(nlnn)O(n\ln n)O(nlnn)但是有这么一种算法,它牺牲了空间来换取时间,得到了线性的时间复杂度与低时间复杂度相对应的,是它的空间复杂度,达到了O(K)O(K)O(K)其中KKK是数据范围这就是计数排序计数排序的主要原理是:记录该数字出现原创 2020-12-16 00:06:11 · 337 阅读 · 0 评论 -
排序算法——堆排序
堆排序堆排序是一种时间复杂度在O(nlnn)O(n\ln n)O(nlnn)的排序方式它利用了一种叫"堆"的数据结构此“堆”非彼“堆”,和内存里面的“堆”、“栈”是不一样的。它是一种基于二叉树的数据结构堆堆的特点是,根结点是子节点的最大值或者最小值子节点的最值全部都堆在根结点上了,所以这个数据结构叫堆(强行自圆其说)介绍一下使用数组模拟二叉树构造堆的方法为什么要使用数组模拟呢?因为在实际的使用中数组比链表更加方便,我不希望为了给几个元素进行排序而写几十行代码来构建一个链表,也不希望大部分时原创 2020-12-16 00:05:07 · 121 阅读 · 0 评论 -
排序算法——猴子排序
猴子排序让一群猴子在打印机前昼夜不停地敲打键盘,最终有可能能输入一部莎士比亚作品集——尽管概论微乎其微。同理,把一堆扑克牌扔到天上,等它们落下来的时候有概率会刚刚好从小到大排成一列。现在有一个无序的数组,我们让一只猴子来帮我们进行排序:#include <stdio.h>#include <stdlib.h>#include <time.h>#include <stdbool.h>#include <string.h>#defi原创 2020-12-16 00:03:35 · 6878 阅读 · 3 评论 -
排序算法——归并排序(Merge Sort)
归并排序归并的英文是:Merge sort其实我们上一节shell排序的论文里面讲到的就是merge sortmerge sort的过程是,将数组分为许多的组,即将粗粒度的数组分为细粒度的数组,然后再将其合并它的优点是,同时对多个数据进行对比排序归并排序是分治法的典型应用分:体现在将数组分为小数组治:对排好序的数组进行合并现在举例对其过程进行分析:source:6, 202, 100, 301,38, 8, 1->divide6, 202, 100, 30138, 8, 1-原创 2020-12-15 13:43:47 · 548 阅读 · 0 评论 -
排序算法——shell排序(希尔排序)
Shell排序Shell排序,又称希尔排序,是我最喜欢的一种排序方式,也是我认为在简单的排序算法里效率最高、在效率高的排序算法里最简单的。(就像我,是成绩差的学生里代码最好的,在代码好的学生里成绩最差的(啊,这个好像没有什么好攀比的))接下来详细讲解下Shell排序的流程、复杂度使用到的网络资料链接:百度百科参考的书籍:C语言K&R首先使用《C语言K&R》上的代码作分析/* shellsort: sort v[0]...v[n-1] into increasing order原创 2020-12-15 13:41:08 · 2524 阅读 · 0 评论 -
动态规划——背包问题(一)
动态规划——背包问题(一)背包问题的基本描述:有nnn件物品,第iii件物品的重量为w[i]w[i]w[i],价值为p[i]p[i]p[i],将这些物品放入一个大小为VVV的背包,要求使得物品的总价值PPP尽量大。则得到P=∑p[i]P = \sum p[i]P=∑p[i]V≥∑w[i]V \geq \sum w[i]V≥∑w[i]当要求物品恰能放入背包时有∑w[i]=V\sum w[i] = V∑w[i]=V背包问题可以分为以下几类,按照复杂程度排序为01背包问题多重背包原创 2020-12-15 13:38:09 · 150 阅读 · 0 评论 -
排序算法——插入排序
插入排序插入排序是算法导论中介绍的第一个简单排序算法它的流程可以用洗扑克牌来类比:现在你的手上有一些乱序的扑克牌,要将其进行排序先抽出手上的最后一张牌,然后倒着寻找第一张比它小的牌,并插入在那张牌后面接下来重复以上流程,直到所有扑克牌有序为止例子:5 3 8 7 1 9 4 2 65 3 8 7 1 2 9 4 6 // 6 is bigger than 2, and 2 is smaller than 15 3 8 7 1 2 4 9 6 // 6 is bigger than 4,原创 2020-12-14 15:12:04 · 202 阅读 · 0 评论 -
排序算法——冒泡排序
冒泡排序冒泡排序是我学习的第二个排序算法它的特点是,每组所需要的数据都会像吐泡泡一样向上冒出看下面的例子若有一个数组m = [5, 3, 4, 2, 1],将其从小到大排列5 3 4 1 25 3 1 4 25 1 3 4 21 5 3 4 2第一轮排序将1冒泡到最前面1 5 3 2 41 5 2 3 41 2 5 3 4第二轮排序将2冒泡到第二个位置1 2 5 3 41 2 3 5 4第三轮排序将3冒泡到最前面1 2 3 5 41 2 3 4 5最后一轮排序将4原创 2020-12-14 15:09:14 · 158 阅读 · 0 评论 -
排序算法——选择排序
选择排序选择排序是我认为最简单的排序算法基本思想:假设有一个长为N的数组,要将其从小到大排序首先,我找到最小的元素,将其放在第一个位置然后,我在第二个位置到最后一个位置间找到最小的元素,再放在第二个位置…重复以上操作,直到只剩一个元素为止选择排序是很容易理解的接下来分析它的空间复杂度、时间复杂度因为并没有使用额外的空间对数组进行存储,因此其空间复杂度为O(1)O(1)O(1)因为需要两层循环、且每层循环都是对数组的遍历,因此其时间复杂度为O(n2)O(n^2)O(n2)给出其几种代码原创 2020-12-14 15:08:03 · 77 阅读 · 0 评论