====== Leetcode =======
IvyYin
达则兼济天下
展开
-
Leetcode#1137:第N个泰波那契数
题目描述泰波那契序列 Tn 定义如下:T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2给你整数 n,请返回第 n 个泰波那契数 Tn 的值。题解 python3class Solution: def tribonacci(self, n: int) -> int: # 空间复杂度 O(n) # res = [0,1,1] # for i in range(2,原创 2021-11-11 23:07:23 · 524 阅读 · 1 评论 -
Leetcode#509:
题目描述斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。题解 python3class Solution: def fib(self, n: int) -> int: #动态规划 O(n)空间复杂度 res = [0,1] for i in range(2, n+1): res.append(res[i-1] + res[i-2])原创 2021-11-11 22:43:17 · 478 阅读 · 0 评论 -
Leetcode#34:在排序数组中查找元素的第一个和最后一个位置
题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?题解 python3# 复杂度O(log n)的方法,用二分无疑了# 两次二分,第一次查找最左等于target的下标,第二次查找第一个大于target的下标,为了方便,增加flag参数区分是第一次还是第二次class Solution:原创 2021-11-10 22:49:01 · 255 阅读 · 0 评论 -
Leetcode#33: 搜索旋转排序数组
题目描述整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个原创 2021-11-10 22:45:45 · 122 阅读 · 0 评论 -
Leetcode#74: 搜索二维矩阵
题目描述编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。题解 python3class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: # 从右上角开始查找,大于则行+1,小于则列-1 m = len(matrix)原创 2021-11-10 22:43:53 · 102 阅读 · 0 评论 -
Leetcode#495:提莫攻击
题目描述在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。当提莫攻击艾希,艾希的中毒状态正好持续 duration 秒。正式地讲,提莫在 t 发起发起攻击意味着艾希在时间区间 [t, t + duration - 1](含 t 和 t + duration - 1)处于中毒状态。如果提莫在中毒影响结束 前 再次攻击,中毒状态计时器将会 重置 ,在新的攻击之后,中毒影响将会在 duration 秒后结束。给你一个 非递减 的整数数组 tim原创 2021-11-10 21:07:58 · 127 阅读 · 0 评论 -
Leetcode#1: twoSum
初试Leetcode,发现问题的解只有一个class,可能是为了专注于算法的效率吧,系统会自动补全main()函数以及输入输出,对于编程大牛来说,这样的平台是非常好的,有了算法的思路直接写,然后运行即可。但是对于菜鸟的我来说,实现算法就是个难题,却还有一个难题,自己写的代码不经过编译,不知道对错更改!!!于是乎,只能在IDE下,自己补写main()函数,然后编译通过后,再在平台上运行。 拿第一原创 2017-08-18 15:55:03 · 404 阅读 · 0 评论 -
Leetcode#7: ReverseInteger
题目描述:将整数反转。 比如:Example1: x = 123, return 321Example2: x = -123, return -321注意:由于整数反转后可能会造成溢出,溢出返回0以下是C++实现:class Solution{public: int reverse(int x) { //反转后为answer int an原创 2017-08-21 19:34:38 · 195 阅读 · 0 评论 -
Leetcode#9: Palindrome Number
题目描述:判断一个数是否为回文数,是返回true,不是返回false注意:负数的处理以下是C++实现://解题思路:循环取数字的第一位和最后一位作比较,若相等则取第二位和倒数第二位作比较,直到完成比较或者遇到不相等情况程序结束class Solution{public: bool isPalindrome(int x) { if (x < 0)原创 2017-08-21 19:41:42 · 184 阅读 · 0 评论 -
Leetcode#13: Roman to Integer
题目描述:罗马数字转换成阿拉伯整数思路:对于罗马数字与阿拉伯数字之间的关系,如下图所示:罗马数字计数规则:相同的数字连写,所表示的数等于这些数字之和,例如:III = 3;小的数字在大的数字右边,所表示的数等于这些数字之和,相等情况也划为此类,例如:VI = 6;小的数字在大的数字左边,所表示的数=(右边的数-左边的数*2)+左边的数,例如:IV = 4;若有需要,请访问我的Github获取原创 2017-08-22 17:02:53 · 170 阅读 · 0 评论 -
Leetcode#27: Remove Element
题目描述:将数组中值为val的元素删除,返回删除后的数组长度。注意:不能使用额外的空间。思路:首先判空,若数组为空,返回0;若数组非空,则将不等于val的数组元素依次赋值给数组的元素,等于val的值就被过滤掉了;使用answer记录赋值的次数,最后answer即为新数组长度若有需要,请访问我的Github获取完整C++源码。class Solution {public: int r原创 2017-08-25 17:37:42 · 154 阅读 · 0 评论 -
Leetcode#35: Search Insert Position
题目描述:给定一个已排序的数组和一个target值,若数组中有元素的值与target相等,则返回其位序;若找不到,则返回要插入位置的位序。假设数组中无重复元素。以下是测试用例:[1,3,5,6], 5 → 2 [1,3,5,6], 2 → 1 [1,3,5,6], 7 → 4 [1,3,5,6], 0 → 0思路:这道题的标准解法是采用二分查找法,当然暴力求解也可以,不过复杂度更高,但是思路会原创 2017-08-26 09:54:17 · 191 阅读 · 0 评论 -
Leetcode#21: Merge Two Sorted Lists
题目描述:将已排好序的两个链表连接到一起,返回连接的链表。以下是C++实现,如有需要,请访问我的Github获取包含测试程序的完整源码。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x)原创 2017-08-27 10:23:18 · 218 阅读 · 0 评论 -
Leetcode#20: Valid Parentheses
题目描述:判断一个字符串是否有效,该字符串是括号“()[]{}”组成的,若前后括号是匹配的则有效,反之无效思路:这是一道使用栈解决的题目,如果是左括号,就压入栈中;如果是右括号,就要判定其与栈顶元素是否匹配,若匹配则栈顶元素出栈;直到最后,若栈中的左括号全部出栈,栈为空则有效;反之栈非空,则无效以下是C++实现,如有需要,请访问我的Github获取包含测试程序的完整源码。class Solu原创 2017-08-28 10:04:49 · 174 阅读 · 0 评论 -
Leetcode#26: Remove Duplicates from Sorted Array
题目描述:原地移除有序数组中的重复元素,返回移除后的数组长度要求:不能利用额外的空间开销思路:先判断数组是否为空,为空返回0;两个指针, i 指向原数组的元素, inedx 指向不重复数组的元素;如果两个指针指向的数字相等,则i++;如果两个指针指向的数字不相等,则index++,并用原数组的第i个值覆盖第index个值;index是从0开始的,要输出个数,返回 index + 1若有需原创 2017-08-24 10:59:28 · 154 阅读 · 0 评论 -
Leetcode#53: Maximum Subarray
题目描述:求一个数组中子数组和的最大值,需要注意的是,子数组一定要是连续的思 路1:传统解法中,这是一道典型的动态规划题目,利用最优子结构求解当数组元素为0个时,返回最大值为0当数组元素大于0个时,遍历数组,当前最优解为:max(上一个最优解 + 当前数组元素,当前数组元素)全局最优解为:max(上一个全局最优解,当前最优解)思 路2:分治法将数组分成左右两部分,...原创 2017-08-29 11:23:00 · 220 阅读 · 0 评论 -
Leetcode#58: Length of Last Word
题目描述:求字符串最后一个词的长度,如果不存在,返回0思 路:简单的字符串匹配问题遍历字符串,如果当前字符不为空而当前字符的前一个字符为空,则将长度置为1,然后长度++,直到下次遇到空格如有需要,请访问我的Github获取包含测试程序的C++源码。class Solution{public: int lengthOfLastWord(string s) {原创 2017-08-29 11:48:22 · 203 阅读 · 0 评论 -
Leetcode#66: Plus One
题目描述:大数相加问题,将大数的每一位存储在数组中,使大数加一; 思 路:大数加1,应该是从最后一位起,加1或者进位;当前数字为9时,将当前数字置为0;当前数字不为9时,直接加1返回即可;若整个数组全为9,则将数组的第一个位置元素置为1,并且数组最后再加一个元素0;如有需要,请访问我的Github获取包含测试程序的C++源码。class Solution{public:原创 2017-08-30 10:09:10 · 196 阅读 · 0 评论 -
Leetcode#67: Add Binary
题目描述:两个二进制数相加,求和class Solution{public: string addBinary(string a,string b) { string answer = ""; int la = a.length(); int lb = b.length(); if(la == 0)原创 2017-08-30 22:06:06 · 197 阅读 · 0 评论 -
Leetcode#70: Climbing Stairs
题目描述:爬n阶的楼梯,可以每次爬一阶或者两阶,求不同的方式数量思路:这个题目是一个计算n层阶梯情况下,走到顶端的路径种数(要求每次只能上1层或者2层阶梯)。这是一个动态规划的题目: n = 1 时 ways = 1; n = 2 时 ways = 2; n = 3 时 ways = 3; … n = k 时 ways = ways[k-1] + ways[k-2];如有需原创 2017-08-31 11:09:18 · 171 阅读 · 0 评论 -
Leetcode#69: Sqrt(x)
题目描述:求平方根思路:利用牛顿迭代法求解即可class Solution{public: int mySqrt(int x) { long long y = x; while(y * y > x) { y = (y + x / y) / 2; } return y;原创 2017-08-31 10:36:19 · 218 阅读 · 0 评论 -
Leetcode#83: Remove Duplicates from Sorted List
和之前数组中删除重复元素的思路一样,将不重复的元素保留在链表中即可。如有需要,请访问我的Github获取包含测试程序的C++源码。class Solution{public: ListNode *deleteDuplicates(ListNode *head) { if(head == NULL) { retu...原创 2017-09-02 10:21:18 · 183 阅读 · 0 评论 -
Leetcode#88: Merge Sorted Array
题目描述:将两个已排序的数组合并成一个数组注 意:假设原来的数组1有足够的空间容纳两个数组思 路:两个数组分别由后至前比较大小,需要注意的是,vector在使用时,若数组未初始化为一定大小,数组元素的赋值只能使用vec.push_back()完成;若数组已经使用vec.resize(n)初始化大小,才可使用vec[i]的方式对数组进行赋值。如有需要,请访问我的Github获取包含测试程序原创 2017-09-02 12:35:01 · 171 阅读 · 0 评论 -
Leetcode#100: SameTree
题目描述:判断两棵树是否相同C++实现:bool isSameTree(TreeNode* p, TreeNode* q) { if(p == NULL &amp;&amp; q == NULL) return true; if(p == NULL || q == NULL) return false; if(p-&gt;val ...原创 2017-10-20 17:01:15 · 163 阅读 · 0 评论 -
Leetcode#98. Validate Binary Search Tree
二叉搜索树又叫二叉查找树(Binary Search Tree),定义如下:(1)一棵空树(2)若左子树不空,则左子树所有结点的值都小于根节点的值;若右子树不空,则右子树所有结点的值都大于根节点的值 也就是说,一棵二叉搜索树的中序遍历肯定是递增序列,若不是递增序列,则一定不是二叉搜索树。以下是C++实现源码:20180421更新(1)先对二叉树中序遍历,保存在 ve...原创 2017-10-19 16:09:42 · 230 阅读 · 0 评论 -
leetcode#104:Maximum Depth of Binary Tree
题目描述:求二叉树的最大深度int maxDepth(TreeNode* root) { if(root == NULL) return 0; int maxL = maxDepth(root->left); int maxR = maxDepth(root->right); re...原创 2017-10-21 22:18:41 · 173 阅读 · 0 评论 -
Leetcode#28: Implement strStr()
Leetcode#28: 求子串第一次出现在母串时的位置索引题目链接:https://leetcode.com/problems/implement-strstr/题目描述:已知母串haystack和子串needle,若查找成功,返回子串第一次出现在母串中时,母串的位置索引;否则返回-1思 路:首先判断子串是否为空,若为空,则位置索引为0;再判断子串的长度是否大于母串,若大于,则返回-1原创 2017-10-14 23:19:38 · 182 阅读 · 0 评论 -
leetcode#102:Binary Tree Level Order Traversal
之前写过一篇关于二叉树层次遍历的文章(链接),这道题的思路基本一致。题目描述: 给定二叉树{3,9,20,#,#,15,7},输出二叉树的每一层结果。如图: 返回结果应为: [ [3], [9,20], [15,7] ]解题思路:注意返回结果为二维数组,借助于队列,对树进行广度优先遍历(BFS),下面是C++实现:/**struct TreeNode...原创 2018-02-26 19:55:06 · 311 阅读 · 0 评论 -
Leetcode#121. Best Time to Buy and Sell Stock
题目描述:连续n天的股票价格,求出一次买入一次卖出,收益的最大值。解题思路:遍历数组若遇到的值prices[i]比当前小,则最小值min更新;若遇见的值prices[i]与最小值min的差比最大收益max大,则更新max;最终的max就是最大收益。C++实现如下:class Solution {public: int maxProfit(vector<in...原创 2018-03-07 20:05:51 · 137 阅读 · 0 评论 -
Leetcode#122. Best Time to Buy and Sell Stock II
题目描述:一个数组代表每天的股票价格,你可以选择多次买入卖出,使得收益最大。需要注意的是,下一次买入之前一定要先卖出。解题思路:其实就考虑一点,什么时候收益最大?答案是只要有利润,就进行交易。也就是说,只要下一次的价格比当前价格大,就交易。 总体来看,只要今天比前一天的价格高,就有收益,最后将这些收益累加,就是最大收益。C++实现如下:class Solution {publi...原创 2018-03-07 20:25:04 · 169 阅读 · 0 评论 -
leetcode#107. Binary Tree Level Order Traversal II
与Binary Tree Level Order Traversal相比,此题仅仅是将遍历得到的每一层的结果进行逆序,C++中有reverse(start, end)函数,start为参数的首元素,end为参数的末元素,因此,将Binary Tree Level Order Traversal的结果进行逆序操作,即为此题的解,C++实现代码如下:/** * Definition fo...原创 2018-02-28 11:43:55 · 134 阅读 · 0 评论 -
Leetcode#172. Factorial Trailing Zeroes
题目描述:给定一个整数 n,计算 n! 末尾有多少个0解题思路:虽然代码只有短短几行,但问题的解决是需要技巧的。首先明确一个问题,n! 末尾若有0出现,那么一定是 2 * 5得来的,所以如果我们知道了 n! 中有多少个 2 * 5,那么就知道了末尾有多少个0;接下来,我们就想一想n! 中有多少个 2 * 5?有一个事实,在 n! 中,2的个数一定是大于5的个数的,有博主给出了证明,如下...原创 2018-03-14 10:29:45 · 119 阅读 · 0 评论 -
Leetcode#171. Excel Sheet Column Number
题目描述:将以下输入的字符转换成整型数,如: A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 解题思路:本题是Leetcode#168. Excel Sheet Column Title的逆,解决的是将26进制的数字转换成10进制。C++实现如...原创 2018-03-14 09:47:47 · 126 阅读 · 0 评论 -
Leetcode#168. Excel Sheet Column Title
题目描述:给定一个正整数n,返回其对应的字符,对应关系如下: 1 -> A 2 -> B 3 -> C … 26 -> Z 27 -> AA 28 -> AB 解题思路:此题是进制转换问题,将10进制的正整数n转换成26进制的字符串。C++实现如下:class Solution{p...原创 2018-03-12 19:07:36 · 179 阅读 · 0 评论 -
Leetcode#155. Min Stack
题目描述:设计一个最小栈,能够实现如下功能:push(x) – Push element x onto stack.(元素 x 进栈)pop() – Removes the element on top of the stack.(栈顶元素出栈)top() – Get the top element.(获得栈顶元素)getMin() – Retrieve the minimum ele...原创 2018-03-13 19:28:07 · 185 阅读 · 0 评论 -
Leetcode#169. Majority Element
题目描述:一个非空数组,里面有元素出现了数组长度一半以上,返回这个元素解题思路: 最容易想的是排序,返回中间那个元素即可,时间复杂度O(nlog(n)),空间复杂度O(l);另一种思路借助于哈希表,遍历数组每一个元素,出现次数记录在hash表中,若hash值超过了数组长度的一半,返回这个元素即可,时间复杂度O(n),空间复杂度O(n)。C++实现如下:解法一:排序class S...原创 2018-03-13 19:49:29 · 102 阅读 · 0 评论 -
Leetcode#167. Two Sum II - Input array is sorted
题目描述:给定一个升序排列的数组和另外一个数target,若数组中某两个数的和等于target,输出这两个数的索引。假设只有一个解,索引从1开始(注意不是从0开始)。解题思路:双指针问题。两个指针,左指针在数组头,右指针在数组尾。若两者之和等于target,则返回索引;若两者之和大于target,则右指针左移;若两者之和小于target,则左指针右移;C++实现如下:c...原创 2018-03-12 18:45:19 · 169 阅读 · 0 评论 -
Leetcode#160. Intersection of Two Linked Lists
题目描述:两个单链表,假设都无环,判断两个链表是否有交集,如果有返回交集的第一个元素,如果没有,返回null解题思路:若链表有交集,那么链表的最后一个元素一定是一样的。先分别遍历两个链表,若最后一个元素是一样的,说明两个链表有交集;求两个链表长度的差值,让长的链表先走这个差值的距离,短的在链表的头,然后两个链表一起走,每走一步判断一下结点是否一样,若一样则为相交的结点。C++实现...原创 2018-03-09 16:48:13 · 126 阅读 · 0 评论 -
LeetCode #111:Minimum Depth of Binary Tree
与求二叉树的最大深度类似,这道题是求二叉树的最小深度,深度定义为:从根节点到叶子节点的路径上的结点个数,当然,最小深度所在的路径即为从根节点到叶子结点所有路径中结点最少的路径,C++递归实现如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *...原创 2018-03-01 11:21:22 · 126 阅读 · 0 评论 -
Leetcode#175. Combine Two Tables
题目描述:有如下两个表Table和Address,请选择FirstName, LastName, City, State这几个属性出来,不管Address中的属性是否存在; 解题思路:这是一道简单的SQL语句题目,选出两个表中的FirstName, LastName, City, State这几列,根据题意可知使用left join可实现,有关各类join的解析,请看博客SQL-JOIN。...原创 2018-03-16 11:10:28 · 339 阅读 · 0 评论