Leetcode (C++解题报告)
Leetcode刷题专栏
amoscykl
Casablanca!
展开
-
LeetCode 72.Edit Distance (编辑距离)
题目:给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符 删除一个字符 替换一个字符示例 1:输入: word1 = "horse", word2 = "ros"输出: 3解释: horse -> rorse (将 'h' 替换为 'r')rorse ->...原创 2018-11-21 16:18:22 · 317 阅读 · 0 评论 -
LeetCode 206.Reverse Linked List (反转链表)
题目描述:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL AC C++ Solution:从链表头开始一次反转一个节点/** * Definition for singly-linked list. * struct ListNode...原创 2018-11-20 12:59:49 · 196 阅读 · 0 评论 -
LeetCode 205.Isomorphic Strings (同构字符串)
题目描述: 给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。示例 1:输入: s = "egg", t = "add"输出: true示例 2:输入: s = "foo", t ...原创 2018-11-20 12:59:45 · 223 阅读 · 0 评论 -
LeetCode 203.Remove Linked List Elements (移除链表元素)
题目描述:删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5 AC C++ Solution:/** * Definition for singly-linked list. * struct ListNode...原创 2018-11-20 12:59:36 · 213 阅读 · 0 评论 -
LeetCode 204.Count Primes (计数质数)
题目描述:统计所有小于非负整数 n 的质数的数量。示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 AC C++ Solution:解题思路:首先排除2之外的所有偶数,2默认算一个质数。使用一个标志数组(默认为false),从3开始遍历,每次设置当前数及当前数的倍数的标志位为true。每次遍历到没有标记的数,则计...原创 2018-11-20 12:59:40 · 316 阅读 · 0 评论 -
LeetCode 202.Happy Number (快乐数)
题目描述:编写一个算法来判断一个数是不是“快乐数”。一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。示例: 输入: 19输出: true解释: 12 + 92 = 8282 + 22 = 6862 + 82 = 10012 ...原创 2018-11-20 12:59:32 · 339 阅读 · 0 评论 -
LeetCode 201.Bitwise AND of Numbers Range (数字范围按位与)
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。示例 1: 输入: [5,7]输出: 4示例 2:输入: [0,1]输出: 0 AC C++ Solution: class Solution {public: int rangeBitwise...原创 2018-11-20 12:59:28 · 268 阅读 · 0 评论 -
LeetCode 200.Number of Islands (岛屿的个数)
题目描述:给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3 解题思路:深度...原创 2018-11-20 12:59:24 · 365 阅读 · 0 评论 -
LeetCode 199.Binary Tree Right Side View (二叉树的右视图)
题目描述:给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <--- AC ...原创 2018-11-19 18:21:32 · 173 阅读 · 0 评论 -
LeetCode 198.House Robber (打家劫舍)
题目描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1...原创 2018-11-19 17:28:59 · 141 阅读 · 0 评论 -
LeetCode 191.位1的个数
题目描述:编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。示例 :输入: 11输出: 3解释: 整数 11 的二进制表示为 00000000000000000000000000001011 示例 2:输入: 128输出: 1解释: 整数 128 的二进制表示为 00000000000000000000000...原创 2018-11-19 17:22:58 · 216 阅读 · 0 评论 -
LeetCode 190.Reverse Bits (颠倒二进制位)
颠倒给定的 32 位无符号整数的二进制位。示例:输入: 43261596输出: 964176192解释: 43261596 的二进制表示形式为 00000010100101000001111010011100 , 返回 964176192,其二进制表示形式为 00111001011110000010100101000000 。 AC C++ Solution:...原创 2018-11-19 17:20:43 · 195 阅读 · 0 评论 -
LeetCode 189.Rotate Array (旋转数组)
题目描述:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入: [-...原创 2018-11-19 17:11:49 · 209 阅读 · 0 评论 -
LeetCode 179.Largest Number (最大数)
题目描述:给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210示例 2:输入: [3,30,34,5,9]输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。 AC C++ Solution:class Solution {public: string ...原创 2018-11-19 16:37:28 · 149 阅读 · 0 评论 -
LeetCode 174.Dungeon Game (地下城游戏)
题目描述:一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健...原创 2018-11-19 15:38:39 · 216 阅读 · 0 评论 -
LeetCode 173.Binary Search Tree Iterator (二叉搜索树迭代器)
题目描述:实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。注意: next() 和hasNext() 操作的时间复杂度是O(1),并使用 O(h) 内存,其中 h 是树的高度。 AC C++ Solution:/** * Definition for binary tree * struct T...原创 2018-11-19 15:05:00 · 166 阅读 · 0 评论 -
LeetCode 172.Factorial Trailing Zeroes (阶乘后的零)
题目描述:给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) 。 解题思路:这个想法是:0来自10。10来自2 x 5我们需要考虑5和2的所有产生。例...原创 2018-11-19 14:16:17 · 249 阅读 · 0 评论 -
LeetCode 171.Excel Sheet Column Number (Excel表列序号)
题目描述:给定一个Excel表格中的列名称,返回其相应的列序号。例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...示例 1:输入: "A"输出: 1示例 2:输入: "AB"输出: 28...原创 2018-11-19 13:39:22 · 200 阅读 · 0 评论 -
LeetCode 169.Majority Element (求众数)
题目描述:给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2 AC C++ Solution:方案1:一目了然,不用多解释。class Solu...原创 2018-10-18 22:27:44 · 183 阅读 · 0 评论 -
LeetCode 168.Excel Sheet Column Title (Excel表列名称)
题目描述:给定一个正整数,返回它在 Excel 表中相对应的列名称。例如, 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB ...示例 1:输入: 1输出: "A"示例 2:输入: 28输出: "AB"...原创 2018-10-18 22:22:22 · 385 阅读 · 0 评论 -
LeetCode 167.Two Sum II - Input array is sorted (两数之和 II - 输入有序数组)
题目描述:给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 1...原创 2018-10-18 22:16:16 · 260 阅读 · 0 评论 -
LeetCode 165.Compare Version Numbers (比较版本号)
题目描述:比较两个版本号 version1 和 version2。如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。你可以假设版本字符串非空,并且只包含数字和 . 字符。 . 字符不代表小数点,而是用于分隔数字序列。例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五...原创 2018-10-18 22:12:04 · 222 阅读 · 0 评论 -
LeetCode 164.Maximum Gap (最大间距)
题目描述:给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。示例 1:输入: [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。示例 2:输入: [10]输出: 0解释: 数组元素个数小于 2,因此返回 0。说明:...原创 2018-10-18 22:03:51 · 247 阅读 · 0 评论 -
LeetCode 162.Find Peak Element (寻找峰值)
题目描述:峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。示例 1:输入: nums = [1,2,3,1]输出: 2解释: 3 是峰值元素,你的函数应该...原创 2018-10-18 21:47:13 · 322 阅读 · 0 评论 -
LeetCode 160.Intersection of Two Linked Lists (相交链表)
题目描述:编写一个程序,找到两个单链表相交的起始节点。 例如,下面的两个链表:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3在节点 c1 开始相交。 注意:...原创 2018-10-18 21:22:04 · 188 阅读 · 0 评论 -
LeetCode 155.Min Stack (最小栈)
题目描述:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。 pop() -- 删除栈顶的元素。 top() -- 获取栈顶元素。 getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minSt...原创 2018-10-15 23:42:36 · 220 阅读 · 0 评论 -
LeetCode 154.Find Minimum in Rotated Sorted Array II (寻找旋转排序数组中的最小值 II)
题目描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。注意数组中可能存在重复的元素。示例 1:输入: [1,3,5]输出: 1示例 2:输入: [2,2,2,0,1]输出: 0说明:这道题是 寻找旋转排序数组中的最小值 的延伸...原创 2018-10-15 23:39:51 · 226 阅读 · 0 评论 -
LeetCode 153.Find Minimum in Rotated Sorted Array (寻找旋转排序数组中的最小值)
题目描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0 AC C++ Solution...原创 2018-10-15 23:38:09 · 248 阅读 · 0 评论 -
LeetCode 152.Maximum Product Subarray (乘积最大子序列)
题目描述:给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。 AC C++ Solution:很简洁的一种解决方法,一...原创 2018-10-15 23:36:55 · 230 阅读 · 0 评论 -
LeetCode 151.Reverse Words in a String (翻转字符串里的单词)
题目描述:给定一个字符串,逐个翻转字符串中的每个单词。示例: 输入: "the sky is blue",输出: "blue is sky the".说明:无空格字符构成一个单词。 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。进阶: 请选用C语言的用户尝试使用 O(1) 空...原创 2018-10-15 23:34:51 · 364 阅读 · 0 评论 -
LeetCode 150.Evaluate Reverse Polish Notation (逆波兰表达式求值)
题目描述:根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: ((2 + 1) * 3) ...原创 2018-10-12 10:38:02 · 256 阅读 · 0 评论 -
LeetCode 148.Sort List (排序链表)
题目描述:在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5AC C++ Solution:归并排序...原创 2018-10-12 10:34:03 · 247 阅读 · 0 评论 -
LeetCode 147.Insertion Sort List (对链表进行插入排序)
题目描述:对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。 插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的...原创 2018-10-12 10:17:42 · 179 阅读 · 0 评论 -
LeetCode 145.Binary Tree Postorder Traversal (二叉树的后序遍历)
题目描述:给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] AC C++ Solution:堆栈迭代解法:/** * Definition for a binary tree node. * struct TreeNode { * in...原创 2018-10-12 10:13:49 · 304 阅读 · 0 评论 -
LeetCode 144.Binary Tree Preorder Traversal (二叉树的前序遍历)
题目描述:给定一个二叉树,返回它的 前序 遍历。 示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] AC C++ Solution:不用多解释,看代码。 堆栈迭代解法:/** * Definition for a binary tree node. * struct Tree...原创 2018-10-12 10:10:09 · 263 阅读 · 0 评论 -
LeetCode 143.Reorder List (重排链表)
题目描述:给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4-&...原创 2018-10-12 10:02:49 · 208 阅读 · 0 评论 -
LeetCode 142.Linked List Cycle II (环形链表 II) 详解
题目描述:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。说明:不允许修改给定的链表。进阶:你是否可以不用额外空间解决此题? AC C++ Solution:解题思路:还是使用两个指针,一个fast,每次移动两步;一个slow,每次移动一步。 a b ...原创 2018-10-12 09:57:45 · 350 阅读 · 0 评论 -
LeetCode 141.Linked List Cycle (环形链表)
题目描述:给定一个链表,判断链表中是否有环。进阶:你能否不使用额外空间解决此题? AC C++ Solution:解题思路:使用两个指针,一个指针一次走两步(fast),另一个一次走一步(slow);若链表中有环,则两个指针迟早会遇上!代码:/** * Definition for singly-linked list. * struct ListNo...原创 2018-10-12 09:41:33 · 202 阅读 · 0 评论 -
LeetCode 139.Word Break (单词拆分)
题目描述:给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leet...原创 2018-10-10 23:24:18 · 312 阅读 · 0 评论 -
LeetCode 137.Single Number II (只出现一次的数字 II)
题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,3,2]输出: 3示例 2:输入: [0,1,0,1,0,1,99]输出: 99 AC C++ Solution:解题思路:基本...原创 2018-10-10 23:14:04 · 173 阅读 · 0 评论