![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
Blocking The Sky
这个作者很懒,什么都没留下…
展开
-
剑指 Offer II 113. 课程顺序
现在总共有 numCourses 门课需要选,记为 0 到 numCourses-1。给定一个数组 prerequisites ,它的每一个元素 prerequisites[i] 表示两门课程之间的先修顺序。 例如 prerequisites[i] = [ai, bi] 表示想要学习课程 ai ,需要先完成课程 bi 。请根据给出的总课程数 numCourses 和表示先修顺序的 prerequisites 得出一个可行的修课序列。可能会有多个正确的顺序,只要任意返回一种就可以了。如果不可能完成所有原创 2021-09-24 22:15:41 · 112 阅读 · 0 评论 -
LeetCode 1361. 验证二叉树
二叉树上有 n 个节点,按从 0 到 n - 1 编号,其中节点 i 的两个子节点分别是 leftChild[i] 和 rightChild[i]。只有 所有 节点能够形成且 只 形成 一颗 有效的二叉树时,返回 true;否则返回 false。如果节点 i 没有左子节点,那么 leftChild[i] 就等于 -1。右子节点也符合该规则。注意:节点没有值,本问题中仅仅使用节点编号。示例 1:输入:n = 4, leftChild = [1,-1,3,-1], rightChild = [2,-原创 2021-09-24 20:55:07 · 149 阅读 · 0 评论 -
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。二分查找class Solution {public: int binary_search_begin(vector<int>& nums, int target){//找到第一个位置 int mid; int low=0; int high=nums原创 2021-09-23 00:22:27 · 73 阅读 · 0 评论 -
LeetCode 310. 最小高度树
class Solution {public: vector<int> findMinHeightTrees(int n, vector<vector<int>>& edges) { vector<int> minvex; if(n==1){ return {0}; } else if(n==2){ return {0,1};原创 2021-09-22 21:45:05 · 64 阅读 · 0 评论 -
LeetCode 133. 克隆图
给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。深度优先搜索class Solution {public: unordered_map<Node*,Node*> visited; //记录原节点对应的新图中的克隆节点 Node* cloneGraph(Node* node) //递归一定要弄清楚函数的返回值是什么,这儿返回值是node节点对应的克隆图中的节点原创 2021-09-22 19:06:36 · 118 阅读 · 0 评论 -
LeetCode 743. 网络延迟时间
有 n 个网络节点,标记为 1 到 n。给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1 。迪杰斯特拉算法class Solution {public: int networkDelayTime(vector<vector<原创 2021-09-22 13:39:22 · 177 阅读 · 0 评论 -
LeetCode 547. 省份数量
有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。返回矩阵中 省份 的数量。深度优先搜索class Solution原创 2021-09-22 12:48:57 · 71 阅读 · 0 评论 -
LeetCode 797. 所有可能的路径
给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点,空就是没有下一个结点了。译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a 。class Solution {public: bool visited[20]; void init(){ for(int i=0;i<20;i++)原创 2021-09-20 21:58:19 · 114 阅读 · 0 评论 -
LeetCode 103. 二叉树的锯齿形层序遍历
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。class Solution {public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>> result; queue<TreeNode*> q; stack<原创 2021-09-19 21:06:48 · 52 阅读 · 0 评论 -
LeetCode 107. 二叉树的层序遍历 II
给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层序遍历为:[ [15,7], [9,20], [3]]/** * Definition for a binary tree node. * struct TreeNode { * int val;原创 2021-09-19 20:54:58 · 55 阅读 · 0 评论 -
LeetCode 101. 对称二叉树
class Solution {public: bool equal(TreeNode* left,TreeNode* right){ if(left==NULL&&right==NULL) return true; else if(left==NULL||right==NULL) return false; return (equal(left->left,right->r原创 2021-09-19 01:40:07 · 60 阅读 · 0 评论 -
LeetCode 145. 二叉树的后序遍历
给定一个二叉树,返回它的 后序 遍历。1、递归实现class Solution {public: vector<int> result; void PostOrder(TreeNode* root){ if(root){ PostOrder(root->left); PostOrder(root->right); result.push_back(root->val);原创 2021-09-16 15:39:20 · 50 阅读 · 0 评论 -
LeetCode 94. 二叉树的中序遍历
给定一个二叉树的根节点 root ,返回它的 中序 遍历。1、递归class Solution {public: vector<int> result; void InOrder(TreeNode* root){ if(root){ InOrder(root->left); result.push_back(root->val); InOrder(root->right原创 2021-09-16 15:14:36 · 46 阅读 · 0 评论 -
LeetCode 144. 二叉树的前序遍历
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。1、递归class Solution {public: vector<int> result; void PreOrder(TreeNode* root){ if(root){ result.push_back(root->val); PreOrder(root->left); PreOrder(root->r原创 2021-09-16 14:58:07 · 52 阅读 · 0 评论 -
Leetcode 300. 最长递增子序列
题目描述给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。代码class Solution {public: int lengthOfLIS(vector<int>& nums) { vector<int> dp (nums.size(),1); for(i原创 2021-06-16 01:21:01 · 88 阅读 · 0 评论 -
LeetCode 61. 旋转链表
题目描述给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。示例:输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]代码思路先把k对链表长度取余,再遍历找到第n-k个结点,它的下一个结点就是最终链表的第一个结点,最后只需将最后一个结点的next指向最初链表的第一个结点即可,之后要将第n-k个结点的next置为NULL。/** * Definition for singly-linked list. * struct Lis原创 2021-06-13 16:52:17 · 57 阅读 · 0 评论 -
LeetCode 2. 两数相加
题目描述给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.代码/** * Definition for singly-linked list. * struct ListNode {原创 2021-06-13 15:44:36 · 58 阅读 · 0 评论 -
LeetCode 21. 合并两个有序链表
题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {}原创 2021-06-13 00:34:22 · 45 阅读 · 0 评论 -
LeetCode 328. 奇偶链表
题目描述给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL说明:1.应当保持奇数节点和偶数节点的相对顺序。2.链表的第一个节点视为奇转载 2021-06-12 21:53:01 · 38 阅读 · 0 评论 -
LeetCode 203. 移除链表元素
题目描述给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例:代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) :原创 2021-06-12 21:00:04 · 36 阅读 · 0 评论 -
LeetCode 206. 反转链表
题目描述给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例:代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListN原创 2021-06-12 20:58:34 · 41 阅读 · 0 评论 -
LeetCode 19. 删除链表的倒数第 N 个结点
题目描述给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?代码1、双指针/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullp原创 2021-06-12 00:20:43 · 37 阅读 · 0 评论 -
LeetCode 160. 相交链表
题目描述代码1、哈希法两个链表从头同时开始遍历,hashset中没有当前节点则插入hashset,否则返回该节点即可。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListN原创 2021-06-11 23:13:28 · 70 阅读 · 0 评论 -
LeetCode 142. 环形链表 II
题目描述给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?示例:代码...原创 2021-06-11 22:41:27 · 45 阅读 · 0 评论 -
LeetCode 141. 环形链表
题目描述给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例:输入:head = [3,2,0,-4]转载 2021-06-11 22:06:34 · 57 阅读 · 0 评论 -
面试题 16.05. 阶乘尾数
题目描述设计一个算法,算出 n 阶乘有多少个尾随零。示例:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。代码因为一个数的阶乘只有是5或5的倍数的阶乘时才会出现尾随零,所以由此可以推得求一个数的尾随零数的个数只需看它能除以几个5就有几个零了!class Solution {public: int trailingZeroes(int n) { int res = 0; while (n >= 5) {原创 2021-06-09 00:45:08 · 108 阅读 · 0 评论 -
剑指 Offer 10- II. 青蛙跳台阶问题
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例:输入:n = 2输出:2代码方法一:递归(优化)直接递归会超时,需要优化,优化方法是减少重复计算。class Solution { public: unordered_map<int,int> hashmap; int numWays(int原创 2021-06-07 22:17:58 · 47 阅读 · 0 评论 -
剑指 Offer 66. 构建乘积数组
题目描述给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]思路1、非常明确的是,第i位的值为前i-1位的累积再乘以后n-i位的累积2、先从左到右累积,第i位的值位前i-1位的累积3、再从右到左累积,第i位的值为2.的结果原创 2021-06-07 21:03:31 · 43 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序
题目描述输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。示例:输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。代码class Solution {public: string reverseWords(string s) {原创 2021-06-03 14:07:28 · 38 阅读 · 0 评论 -
LeetCode 128. 最长连续序列
题目描述给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。示例 :输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。代码哈希法(O(n))思路:用一个哈希存所有元素, 然后随机取一个元素, 删除其前后连续的数字即可。class Solution {public: int longestConsecutive(vector<int>&原创 2021-06-02 17:56:22 · 70 阅读 · 0 评论 -
LeetCode 1389. 按既定顺序创建目标数组
题目描述给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组:目标数组 target 最初为空。按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。重复上一步,直到在 nums 和 index 中都没有要读取的元素。请你返回目标数组。题目保证数字插入位置总是存在。示例 :输入:nums = [0,1,2,3,4], index = [0,1,2,2,1]输出:[0,4,1,3,2原创 2021-06-01 17:01:46 · 41 阅读 · 0 评论 -
LeetCode 151. 翻转字符串里的单词
题目描述给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。说明:输入字符串 s 可以在前面、后面或者单词间包含多余的空格。翻转后单词间应当仅用一个空格分隔。翻转后的字符串中不应包含额外的空格。示例1 :输入:s = "the sky is blue"输出:"blue is sky the"示例2 :输入:s = " hello worl原创 2021-06-01 13:11:11 · 408 阅读 · 0 评论 -
LeetCode 470. 用 Rand7() 实现 Rand10()
题目描述已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。不要使用系统的 Math.random() 方法。思路枚举如下:a 1 2 3 4 5 6 7b 1 2 3 4 5 6 7 82 3 4 5 6 7 8 93 4 5 6 7 8 9 04 5 6 7 8 9 0 15 6 7 8 9 0 1 26 7 8 9 0 1 2 37 8 9 0 1 2 3 4去掉右原创 2021-06-01 00:34:54 · 115 阅读 · 0 评论 -
LeetCode 213. 打家劫舍 II
题目描述你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们原创 2021-05-30 17:50:31 · 50 阅读 · 0 评论 -
LeetCode 599. 两个列表的最小索引总和
题目描述假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设总是存在一个答案。示例:输入:["Shogun", "Tapioca Express", "Burger King", "KFC"]["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse"原创 2021-05-29 23:43:22 · 72 阅读 · 0 评论 -
LeetCode 205. 同构字符串
题目描述给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。示例:输入:s = "egg", t = "add"输出:true代码class Solution {public: bool isIsomorphic(string s, string t) {原创 2021-05-29 23:13:54 · 45 阅读 · 0 评论 -
LeetCode 1. 两数之和
题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。代码class Solution {public:原创 2021-05-29 22:53:38 · 39 阅读 · 0 评论 -
LeetCode 202. 快乐数
题目描述编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 true ;不是,则返回 false。示例 1:输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1示例 2:输入:n原创 2021-05-29 22:14:52 · 36 阅读 · 0 评论 -
LeetCode 1497. 检查数组对是否可以被 k 整除
题目描述给你一个整数数组 arr 和一个整数 k ,其中数组长度是偶数,值为 n 。现在需要把数组恰好分成 n / 2 对,以使每对数字的和都能够被 k 整除。如果存在这样的分法,请返回 True ;否则,返回 False 。示例 1:输入:arr = [1,2,3,4,5,10,6,7,8,9], k = 5输出:true解释:划分后的数字对为 (1,9),(2,8),(3,7),(4,6) 以及 (5,10) 。示例 2:输入:arr = [1,2,3,4,5,6], k = 7输原创 2021-05-29 19:24:52 · 47 阅读 · 0 评论 -
LeetCode 1014. 最佳观光组合
题目描述给你一个正整数数组 values,其中 values[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的 距离 为 j - i。一对景点(i < j)组成的观光组合的得分为 values[i] + values[j] + i - j ,也就是景点的评分之和 减去 它们两者之间的距离。返回一对观光景点能取得的最高分。示例 :输入:values = [8,1,5,2,6]输出:11解释:i = 0, j = 2, values[i] + values[j] + i原创 2021-05-29 18:12:35 · 78 阅读 · 0 评论