- 博客(33)
- 资源 (2)
- 收藏
- 关注
原创 LeetCode 39 组合总数
LeetCode 39 组合总数给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]示例 2:输入:candidates = [2,3,5
2020-12-31 13:12:24
114
原创 [LeetCode 51]N皇后
[LeetCode 51]C++实现N皇后n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例:输入:4输出:[[".Q…", // 解法 1“…Q”,“Q…”,“…Q.”],["…Q.", // 解法 2“Q…”,“…Q”,“.Q…”]]解释: 4 皇后问题存在
2020-11-18 19:50:19
112
原创 [剑指 Offer 65] 不用加减乘除做加法
[剑指 Offer 65] 不用加减乘除做加法写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2链接:https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof/class Solution {public: int add(int a, int b) { while(b != 0) {
2020-11-14 11:49:05
104
原创 [LeetCode 22]括号生成
[LeetCode 22]括号生成数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]来源:力扣(LeetCode 22)链接:https://leetcode-cn.com/problems/generate-parentheses方法:回溯剪枝class Solution {public: void rec
2020-11-14 11:44:41
91
原创 [LeetCode 40]组合总和II
[LeetCode 40]C++组合总和II给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[[1, 7],[1, 2, 5],[2, 6],[1, 1, 6
2020-11-13 22:03:09
61
原创 [LeetCode 90]子集II
[LeetCode 90]子集给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[[2],[1],[1,2,2],[2,2],[1,2],[]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subsets-ii方法:先排序nums,再用set去重class Solution {public: void recurs
2020-11-13 16:48:13
49
原创 [LeetCode 78]子集I
[LeetCode 78]C++实现子集给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subsets方法1、回溯法class Solution {public: void
2020-11-13 16:11:30
57
原创 [LeetCode 871]最低加油次数
[LeetCode 871]C++实现最低加油次数汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。沿途有加油站,每个 station[i] 代表一个加油站,它位于出发位置东面 station[i][0] 英里处,并且有 station[i][1] 升汽油。假设汽车油箱的容量是无限的,其中最初有 startFuel 升燃料。它每行驶 1 英里就会用掉 1 升汽油。当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。为了到达目的地,汽车所必要的最低加油次数是
2020-11-12 22:47:24
160
原创 [LeetCode 452]用最少数量的箭引爆气球
[LeetCode 452]C++用最少数量的箭引爆气球在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可
2020-11-11 20:47:56
86
原创 [LeetCode 45]跳跃游戏II
[LeetCode 45]C++跳跃游戏II给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。说明:假设你总是可以到达数组的最后一个位置。来源:力扣(LeetCode 45)链接:https://leetco
2020-11-11 16:39:17
70
原创 [LeetCode 328]奇偶链表
[LeetCode 328]C++奇偶链表给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例 2:输入: 2->1->
2020-11-11 15:08:21
64
原创 [LeetCode 725]分割链表
[LeetCode 725]C++分割链表给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个符合上述规则的链表的列表。举例: 1->2->3->4, k = 5 // 5 结果 [ [1], [2], [3], [4], null ]示例 1:
2020-11-11 14:23:15
65
原创 [LeetCode 234]回文链表
[LeetCode 234]C++实现回文链表请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: truehttps://leetcode-cn.com/problems/palindrome-linked-list/ (LeetCode 234)方法1、快慢指针翻转比对class Solution {public: bool isPalindrome(ListNode* head) {
2020-11-10 22:50:21
156
原创 [LeetCode 445]两数相加II
[LeetCode 445]C++实现两数相加II给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 8 -> 0 -> 7来源:力扣(Le
2020-11-10 21:38:57
55
原创 [LeetCode 24]两两交换链表中的节点
[LeetCode 24]C++实现两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs方法1、迭代h
2020-11-10 18:19:27
69
原创 [LeetCode 19]删除链表的倒数第N个节点
[LeetCode 19]C++实现删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list方
2020-11-10 14:55:55
62
原创 [LeetCode 83]删除排序链表中的重复元素
[LeetCode 83]C++实现删除排序链表中的重复元素给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-listclass Solution {
2020-11-10 10:58:22
54
原创 [LeetCode 55]跳跃游戏
[LeetCode 55]C++跳跃游戏I给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可
2020-11-09 20:41:24
71
原创 [LeetCode 402]移掉K位数字
class Solution {public:string removeKdigits(string num, int k) {vector stack;//将vector当做栈string result="";for(int i=0;i<num.length();++i){//从高位循环到低位int number=(int)num[i];//栈顶元素大于numberwhile(stack.size()!=0&&stack[stack.size()-1]>numb
2020-11-09 17:22:22
74
原创 [LeetCode 376]摆动序列
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201108152007482.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Nhc2VyMTMw,size_16,color_FFFFFF,t_70#pic_center
2020-11-08 15:49:34
62
原创 [LeetCode 455]发饼干
[LeetCode 455]分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两
2020-11-08 14:43:33
77
原创 [LeetCode 295]数据流的中位数(优先队列实现)
[LeetCode 295]C++实现数据流的中位数中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)addNum(2)findMedian() ->
2020-11-08 10:18:31
161
原创 [LeetCode 215]数组中的第K个最大元素
[LeetCode 215]C++实现求数组中的第K个最大元素在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-a
2020-11-07 21:19:27
53
原创 [LeetCode 946]验证栈序列
[LeetCode 946] C++实现验证栈序列给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3), push(4), pop() -> 4,pu
2020-11-07 15:36:52
111
原创 [LeetCode 155]最小栈
[LeetCode 155]C++实现最小栈设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。来源:力扣(LeetCode 155)链接:https://leetcode-cn.com/problems/min-stackclass MinStack {public: stack<int&
2020-11-06 20:27:11
51
原创 [LeetCode 225]用队列实现栈
[LeetCode 225]C++实现用队列实现栈使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
2020-11-06 20:13:57
43
原创 [LeetCode 232]用栈实现队列
[LeetCode 232]C++实现用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top,
2020-11-06 19:37:30
62
原创 [LeetCode 160]相交链表
[LeetCode 160]C++实现相交链表示例:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个
2020-11-06 17:37:40
65
原创 [LeetCode 92]链表逆序
[LeetCode 92]C++实现链表逆序反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL来源:力扣(LeetCode 92)链接:https://leetcode-cn.com/problems/reverse-linked-list-ii//方法1、迭代
2020-11-06 17:31:54
191
原创 [LeetCode 23]合并K个升序链表
[LeetCode 23]C++实现合并K个升序链表给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6来源
2020-11-06 15:53:15
95
原创 [LeetCode 141,LeetCode 142]链表是否有环
[LeetCode 141,LeetCode 142]C++实现判断链表是否有环,及环的入口位置1-a: 判断是否有环https://leetcode-cn.com/problems/linked-list-cycle/(LeetCode 141)//方法1、利用STL中setclass Solution {public: bool hasCycle(ListNode *head) { set<ListNode*>s; while(head){
2020-11-05 22:20:30
60
原创 [LeetCode 86]分隔链表
[LeetCode 86]C++实现分隔链表要求:给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。链接:https://leetcode-cn.com/problems/partition-list/ (LeetCode 86)//方法: 利用建立两个头指针class Solution {public: ListNode* partition(ListNode* head, int x)
2020-11-05 22:15:15
50
原创 [LeeCode 138]复制带随机指针的链表
复制带随机指针的链表给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:-----val:一个表示 Node.val 的整数。-----random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。来源:力扣(LeetCode 138)链接:https:
2020-11-05 22:00:44
157
教室管理系统
2018-08-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人