
leetcode
暴走小布丁
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
STL priority_queue自定义排序实现
当使用优先队列适配器是,如果我们想根据自己的需求实现排序,该怎么做呢? 具体问题可见leetcode 23 合并K个升序链表 函数对象 首先来回顾一下什么叫做函数对象? 函数对象就是一个重载了()运算符的类的对象,这样就可以直接使用‘对象()’的方式,就像调用函数一样。 在STL中,priority_queue的定义如下,其中第三个参数std::less<T> 和 std::greater<T> 都是以函数对象的方式定义在 <function> 头文件中。原创 2021-12-20 20:06:44 · 803 阅读 · 0 评论 -
Leetcode报错和解决
问题一:runtime error: member access within address 0x602000000000 with insufficient space for an object of type ‘ListNode’ 即内存读取错误,创建了一个链表的指针,但是一直没有初始化 ,导致系统不知道该指向哪块内存。直接初始化即可。 ...原创 2021-11-26 09:04:26 · 1361 阅读 · 0 评论 -
剑指offer53 在排序数组中查找数字(左右边界)
class Solution { public: int search(vector<int>& nums, int target) { int i = 0, j = nums.size()-1; //查找右边界 while(i<=j){ int mid = i + (j-i)/2; if(nums[mid] <= target) i = mid+1; .原创 2021-07-07 20:25:34 · 169 阅读 · 0 评论 -
最小的K个数(C++)
1、快速排序的改进 其实和快速排序思想相同,只不过当哨兵被换到索引K时,排序结束,返回哨兵前的K个数。 class Solution { public: vector<int> getLeastNumbers(vector<int>& arr, int k) { if(k>=arr.size()) return arr; return Least(arr,k,0,arr.size()-1); } vect原创 2021-06-29 20:49:52 · 297 阅读 · 0 评论 -
STL一些库的使用(待补充)
1、堆 大根堆小根堆都可以用STL中的优先队列表示 //优先队列默认大根堆,两种写法 priority_queue<int> a; priority_queue<int, vector<int>, less<int> > a; //小根堆 priority_queue<int, vector<int>, greater<int> > c; 2、vector //截取数组arr一部分赋给res res.assig原创 2021-06-29 20:24:29 · 188 阅读 · 0 评论 -
剑指offer18 删除链表中的节点
题目其实很简单,数据结构的时候就学了,但是现在写下来就是想记录一下大佬的递归写法,感觉很多时候,递归其实是解决链表问题的一种很好的思路,但是自己总是忘掉。 1非递归写法 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class S..原创 2021-06-27 11:38:27 · 102 阅读 · 0 评论 -
剑指offer17 打印从1到最大的n位数
这道提取实际上要考虑大数的越界问题,n较大时,数值可能会超出int32的问题,虽然题目中不考虑,但是实际面试中是肯定要体现出来的,所以需要使用字符串表示大数。 根据leetcode大佬的题解,实际上我们有两个问题要考虑 (1)生成数字的字符串集,这里我们可以采用全排列的方式考虑,这样可以避免了考虑进位的操作。基于分治的思想,我们可以固定高位,然后向低位递归,当个位i而已经被固定时,说明该出自已经确定,打印该数字。 (2)删除高位多余的零,这一步其实实现起来也相对容易,直接截取字符串就好啦。 ..原创 2021-06-27 11:02:11 · 126 阅读 · 0 评论 -
剑指offer25 合并有序链表(C++)
方法一:正常思路 可以理解为双指针? class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { //伪头节点 ListNode *res = new ListNode(0), *p = res; while(l1 && l2 ){ l1->val < l2->val ? (p->next原创 2021-06-22 19:57:49 · 89 阅读 · 0 评论 -
剑指offer06 从尾到头打印链表
方法一:栈 顺序入栈、逆序出栈 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: vector<int> reversePrint(ListNode* head) {原创 2021-06-22 19:37:03 · 108 阅读 · 0 评论 -
剑指Offer11 旋转数组的最小数字(C++)
其实原创 2021-06-20 16:16:27 · 181 阅读 · 0 评论 -
树遍历的新方式
之前写二叉树遍历都有两种方式,递归和迭代。 递归的代码非常简写好写,但是时间复杂度和空间复杂度总是不能让我们满意,迭代呢,处理的条件总是极为复杂,尤其是后序遍历,真的很恶心,在刷leetcode的时候,看到题解里有一道非常不错的方法,既能够使用栈减少空间复杂度,又能够简洁明了,统一前序遍历,后序遍历,中序遍历的算法。 # Definition for a binary tree node. ...原创 2019-12-08 08:26:56 · 157 阅读 · 0 评论 -
子序列问题
最近做了两道子序列问题,分别是 53、最大子序列和和152、乘积最大子序列 他们解决的办法大致相同,都是经过一次遍历保存一个遍历到当前数字的最大值,然后保留一个当前增益或但当前成绩,于是放到一起做一个总结。 53、最大子序列和(来自leetcode题解) 动态规划的是首先对数组进行遍历,当前最大连续子序列和为 sum,结果为 ans 如果 sum > 0,则说明 sum 对结果有增益...原创 2019-12-06 10:03:17 · 272 阅读 · 0 评论 -
二分法
二分法真的是所谓的玄学代码,反正我昨天刚刚学过的,今天遇到一个题,条件又不会判断了,而且我昨天写的博客不见了,气哭。 昨天看到一个很好的讲解二分法的大佬。 这里指路☞:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/er-fen-cha-zhao-...原创 2019-12-06 09:35:40 · 131 阅读 · 0 评论 -
56合并区间
class Solution: def merge(self, intervals: List[List[int]]) -> List[List[int]]: if(not intervals): return [] n=len(intervals) intervals.sort() res=[...原创 2019-12-05 17:16:42 · 106 阅读 · 0 评论 -
621任务管理器(python实现)
1、第一种方法:排序 我们规定 n + 1 个任务为一轮,这样的好处是同一轮中一个任务最多只能被安排一次。在每一轮中,我们将当前的任务按照它们剩余的次数降序排序,并选择剩余次数最多的 n + 1 个任务依次执行。如果任务的种类 t 少于 n + 1 个,就只选择全部的 t 种任务,其余的时间空闲。这样做的正确性在于,由于冷却时间的存在,出现次数较多的那些任务如果不尽早安排,将会导...原创 2019-12-04 16:36:42 · 985 阅读 · 0 评论