
排序
排序
山顶夕景
互联网大厂AI算法工程师。实践出真知。
展开
-
【Leetcode56】合并区间(数组 | 排序)
# 二、思路- 先将所有子列表按照`start_pos`进行排序,有利于保持顺序性,每次处理新子列表时,只用和结果列表`ans_lst`的最后一个子列表对比,如果有重合则合并,然后将合并的新子列表插入结果列表- 排序可以使用`lambda`函数,`intervals.sort(key=lambda x: x[0])`- 时间复杂度O(n),空间复杂度O(n)# 三、代码```pythonclass Solution(object): def merge(self, intervals):原创 2024-09-07 19:07:25 · 645 阅读 · 0 评论 -
【Leetcode207】课程表(拓扑排序)
一道使用拓扑排序的LeetCode经典题。题目:每个课程看作一个节点,先修关系为节点的有向边,目标是判断能否根据课程安排关系,成功学完所有课程。- 拓扑排序算法: - 统计每个节点入度 - 将所有入度为0的节点(注意是可以有多个入度节点,如下图)加入队列`que` - 对第二点中的队列`que`,遍历每个入度为0的节点,将其相邻节点的入度减1,如果相邻节点相邻节点 - 重复第三点直到最后`que`队列为空:如果所有节点此时入度为0,则说明课程的学习顺序合理,能够完整学完课程;如果还有节点原创 2023-04-30 11:33:09 · 266 阅读 · 0 评论 -
【基础题】找到所有右上方无点的所有坐标(不用两层for)
定义:二维平面中,如果某个点的右上方没有其他点,则定义该点为[完美点],找出所有的完美点。(2)不用两层for,可以先对x横坐标进行节点排序,然后从右到左遍历所有节点,用。从n方的时间复杂度降低为nlogn(因为一开始。记录当前的最大y坐标,只要遍历到的节点y坐标比这个。(1)最简单显然是暴力枚举,两层for循环,原创 2023-04-01 17:16:32 · 282 阅读 · 0 评论 -
【Leetcode179】最大数(Arrays.sort自定义比较器)
可以先将数组元素逐个转为字符串后,直接通过java中的`a.compareTo(b)`方法进行比较,它会从头到尾根据ASCII码比较字符的大小;- 在`Array.sort()`中如果使用自定义比较器`Comparator`,这里我们并不是`compareTo()`方法进行重写,而是说这里的排序按照`compareTo()`这个方法的规则,使得拼接后的数越大越好,比如`[3, 30, 34]`排序成为`[34, 3, 30]`数组。原创 2022-09-10 17:15:43 · 661 阅读 · 0 评论 -
【LeetCode912】排序数组(快速排序)
一、题目二、思路看似一道很常规的排序题目,但是如果使用以前的快速排序模板(如下),会发现超时了!如下的Quicksort函数(递归)和划分枢轴的函数Partition。class Solution {public: void Quicksort(vector<int>& nums, int low, int high){ if(low < high){ //partition划分操作,将原表划分成2表原创 2022-03-03 09:40:50 · 1500 阅读 · 0 评论 -
【LeetCode1122】数组的相对排序(哈希or自定义sort)
文章目录一、题目二、方法一:哈希三、代码四、法二:自定义排序一、题目二、方法一:哈希没错,,简单题,就是说将arr1中有arr2的元素,则按照arr2的元素先排列(特别注意:这里的arr2的元素都是不同的,但是arr1中是可以元素重复的),然后arr1中不是arr2的元素则被丢到arr1的尾巴。可以用哈希,用mp1记录arr1数组每种数字的出现次数,mp2记录arr2数组的是否出现,接着就是上面说的逻辑,,就是脑子清醒点,mp1[arr2[i]]这种东西不要搞乱了。三、代码class Solu原创 2022-03-01 20:37:09 · 964 阅读 · 0 评论 -
【LeetCode148】排序链表(自顶向下-递归-归并排序)
1.题目2.思路学408也有要求自顶向下的递归版归并排序,只不过这里是链表的形式,而非数组,。sortlist函数:将含有n个元素的待排序表分成各含有n/2个元素的子表,采用二路归并排序对2个子表递归进行排序merge函数:合并2个已排序的子表得到排序结果在python中可以使用if-else三元表达式,所以在merge的最后将比较完多出来的A或B链继续接入新链尾巴,就可简写为pre.next = headA if headA else headB。if X: A = Yelse:原创 2021-05-28 01:13:09 · 777 阅读 · 4 评论 -
【HJ26】字符串排序(字符处理、排序)
1.题目2.思路注意处理要求:(1)并不是简单的单词排序,而是将字母排序同时,如果存在(多个)大小写字母需要按照输入的顺序排列;——要实现(1)即首先要将“相同字母”的大小写顺序保存,在遍历的时候遇到该“相同字符”就压入该字符所在的string型字符串中;然后将已排序好的26个字母string依次拼接起来,得到排序好的字母串。(2)非字母的字符所在的下标位置不能改变。——这步处理是关键。3.代码#include<iostream>#include<string>原创 2021-02-24 23:56:50 · 1474 阅读 · 0 评论 -
【HJ68】成绩排序(stable_sort)
1.题目2.思路成绩排序题,定义一个学生结构体vector数组vector<student>stu(n)再进行sort。题目说了相同成绩的按照先录入的顺序排列,可以用stable_sort保证两个结构体的内容相同时不交换次序。从C++ 使用const 引用传递参数这篇可知:c++使用引用传递节省内存开销。(1)引用传递是双向的,当在函数中对于形参的数据进行改变后,实参的值也会进行相应的改变。(2)如果我们既不想改变传入参数的值,也不想因为值传递产生太大的开销,如:可以将void D原创 2021-02-20 16:18:01 · 1003 阅读 · 2 评论 -
【哈夫曼树】合并果子(priority_queue)
1.题目大概:合并一堆质量不同的果子,使得树的带权路径长度WPL最小。输入包括两行,第一行是一个整数n(1 <= n <= 300000),表示果子的种类数。第二行包含n个整数,用空格分隔,第i个整数ai(1 <= ai <= 100000)是第i种果子的数目。31 2 9输出包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于263。152.思路哈夫曼树的构建思想:反复选择2个最小的元素,合并,直到只剩下一个元素。一般可使用优先队列(原创 2021-01-19 00:37:17 · 1260 阅读 · 0 评论 -
10G数中找到前5G大的数
堆排序(转换为求前5G大的元素)处理海量数据常用【堆排序】:(1)不需要一次性将所有数据加载到内存中;(2)不用对所有元素进行排序,只需要和堆的根结点比较大小即可;(3)对于海量数据而言,要求前k小/大的数,我们只需要构建一个k个大小的堆,然后将读入的数依次和根节点比较就行了(当然这里的前提是内存需要存的下k个数)最大堆求前n小,最小堆求前n大。1、前k小:构建一个k个数的最大堆,当读取的数大于根节点时,舍弃;当读取的数小于根节点时,替换根节点,重新塑造最大堆,然后继续读取,最后读取完所有的数原创 2021-01-17 21:04:26 · 823 阅读 · 2 评论 -
【1101】Quick Sort (25 分)
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#include<algorithm> #include<map>#include<vector>#inclu...原创 2019-08-03 20:35:06 · 312 阅读 · 0 评论 -
【1089】Insert or Merge (25 分)
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#include<algorithm> #include<map>#include<vector>#inclu...原创 2019-08-13 16:48:20 · 401 阅读 · 0 评论