
LeetCode
如是说如是
读史使人明智
读诗使人灵秀
数学使人周密
科学使人深刻
伦理学使人庄重
逻辑修辞之学使人善辩
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
290. 单词规律
题目描述解题思路类似于同构字符串(205. 同构字符串)的思路,使用两个map来分别记录从pattern到str的映射和str到pattern的映射。注意需要先把str字符串分割成字符串数组,然后思路相同,不赘述了。代码func wordPattern(pattern string, str string) bool { arr := strings.Split(str, " "...原创 2020-01-16 17:27:09 · 251 阅读 · 0 评论 -
268. 缺失数字
题目描述思路一排序,不多解释,估计都能想到。func missingNumber(nums []int) int { sort.Ints(nums) if nums[len(nums) - 1] != len(nums) { return len(nums) } if nums[0] != 0 { return 0 ...原创 2020-01-14 20:48:35 · 267 阅读 · 0 评论 -
算法思维 ---- 回溯算法
回溯算法回溯实际上是一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。说到底,实际上回溯算法就是一个N叉树的前序遍...原创 2020-01-14 13:09:55 · 552 阅读 · 0 评论 -
257. 二叉树的所有路径
题目描述思路分析在递归遍历二叉树时,需要考虑当前的节点和它的孩子节点。如果当前的节点不是叶子节点,则在当前的路径末尾添加该节点,并递归遍历该节点的每一个孩子节点。如果当前的节点是叶子节点,则在当前的路径末尾添加该节点后,就得到了一条从根节点到叶子节点的路径,可以把该路径加入到答案中。/** * Definition for a binary tree node. * type Tr...原创 2020-01-09 13:23:59 · 217 阅读 · 0 评论 -
237. 删除链表中的节点
题目描述思路分析我要吐槽,这鬼题,我以为是出错题了。找了半天的head,直到看看官方解题才反应,这是要求不让访问被删节点的前置节点下,如何删除被删节点。脑筋急转弯系列。。。。思路就是将被删节点的值替换成被删节点后置节点的值,然后删除被删节点的后置节点。func deleteNode(node *ListNode) { node.Val = node.Next.Val no...原创 2020-01-09 11:31:24 · 175 阅读 · 0 评论 -
235. 二叉搜索树的最近公共祖先
题目描述思路一二叉搜索树一定是二叉树,可以用二叉树的最近公共祖先的思想来求解。对每一个节点A,在其两棵子树上求p和q的公共祖先。假设在左子树上求的公共祖先L,在右子树上求的公共祖先R,之后开始分情况进行讨论:当L == null & R == null时,说明p和q没有出现在A子树上,返回空当L == null & R != null时,说明p和q的公共祖先出现在...原创 2020-01-09 11:17:49 · 172 阅读 · 0 评论 -
234. 回文链表
题目描述思路分析这道题是一道很典型的双指针中快慢指针类型的问题,思路是先通过快慢指针找到中心节点,如果链表个数是奇数的话,中间节点是中心节点;如果链表个数是偶数的,中间节点是中心节点偏左的节点。然后对前半部分或后半部分链表进行反转链表操作,最后比较这两个长度相同的子链表每个节点值是否相同,如果都相同,那么这个链表就是回文链表。代码/** * Definition for singly-...原创 2020-01-09 10:30:46 · 237 阅读 · 0 评论 -
算法思维----滑动窗口
滑动窗口作为一种高级双指针技巧的框架,在日常算法中尤其是字符串匹配查询中经常用到。所以总结一下滑动窗口的框架思维。首先需要熟悉一下滑动窗口常用的数据结构:哈希表,也称为字典、散列表,是一种 k => v 结构,这里就不细讲什么是哈希和哈希表了,因为作为基础的数据结构,应该大家都理解。滑动窗口的思想一般是这样的:在字符串S中使用双指针的左右指针技巧,初始化left=right=0,我们...原创 2020-01-08 14:05:15 · 642 阅读 · 0 评论 -
205. 同构字符串
题目描述思路两个字符串同构的含义就是s可以唯一映射到t,t也可以唯一的映射到s.egg 和 add 同构,就意味着下边的映射成立e -> ag -> d也就是将 egg 的 e 换成 a, g 换成 d, 就变成了 add同时倒过来也成立a -> ed -> g也就是将 add 的 a 换成 e, d 换成 g, 就变成了 egg使用一个map,...原创 2020-01-07 11:38:00 · 345 阅读 · 0 评论 -
204. 计数质数
题目描述思路一暴力法具体就不说了,轮询着一个一个的判断,时间复杂度是O(n2n^2n2)。思路二The Sieve of Eratosthenes(埃拉托色尼筛选法)在了解这个算法之前,我们需要了解一下质数的定义和性质定义质数(prime number)也叫素数,为大于1的且除1和本身以外不再有其他因数的自然数,与之相对的是合数。质数有无限个。性质质数只有两个因数:1...原创 2020-01-06 13:06:11 · 317 阅读 · 0 评论 -
202. 快乐数
题目描述思路一集合判断如果一个数是快乐数,那么最终会变回到1,确定了循环的终止条件;若不是快乐数,会进入死循环,如何终至死循环,将每次变换过后的值存入Set中,判断是否出现过重复值,出现则return false;思路二快慢指针“快指针”每次走两步,“慢指针”每次走一步,当二者相等时,即为一个循环周期。此时,判断是不是因为1引起的循环,是的话就是快乐数,否则不是快乐数。func ...原创 2020-01-06 10:42:13 · 245 阅读 · 0 评论 -
198. 打家劫舍
题目描述思路动态规划思路设f(k)是从前k个房屋中能抢劫到的最大数额,AiA_iAi是第i个房间的金额数当n=1,显然有f(1)=A1A_1A1当n=2时,f(2)=max(A1A_1A1, A2A_2A2)当n=3时,有两个选项:抢第三个房子,和第一个房子的金额相加不抢第三个房子,保持现有最大数额于是,可以总结出公式:f(k)=max(f(k-2)+AkA_k...原创 2020-01-03 11:44:18 · 299 阅读 · 0 评论 -
191. 位1的个数
题目描述汉明距离与汉明重量汉明距离:它是一种概念。即两个等长的字符串对应位置上的字符不同的 个数 。汉明重量: 它是一种特殊的汉明距离。指一个字符串与一个等长的“零”字符串 的汉明距离,即一个字符串中非零的字符个数思路一对二进制数字逐个位进行比较,并用count记录为1的数量。//思路一,逐个位遍历比较func hammingWeight(num uint32) i...原创 2020-01-03 11:10:48 · 529 阅读 · 0 评论 -
190. 颠倒二进制位
题目描述思路一用一个变量res存储结果, 依次得到要转换数字的低位,然后保存在res中,res每得到一位后进行左移腾出一位用来保存下一位。一个例子原数字 1011 ,res = 0 res 左移一位,res = 0,得到 1011 的最低位 1 加过来, res = 11011 右移一位变为 101 res = 1 左移一位,res = 10,得到 101 的最...原创 2019-12-30 14:12:46 · 259 阅读 · 0 评论 -
189. 旋转数组
题目描述思路一使用额外空间。就是说之前位置为下标i的值,经过移动后值的位置变成了(i+k) % len(nums),所以使用一个额外的数组空间进行存储,再将新数组赋值给nums。func rotate(nums []int, k int) { temp := make([]int, len(nums)) for i, val := range nums { ...原创 2019-12-30 10:55:11 · 143 阅读 · 0 评论 -
172. 阶乘后的零
题目描述思路分析具体对于5! = 5 * 4 * 3 * 2 * 1 = 120,结果有一个0,原因是存在一对2 * 5 = 10,对于10来说,只有2 * 5可以构成,所以需要在阶乘中查找有多少对2 * 5。在看一个例子:11! = 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 11 * (2 * 5) * 9 * (4 * 2) * 7 ...原创 2019-12-18 10:58:16 · 200 阅读 · 0 评论 -
171&168. Excel表列序号转换
Excel表列名称给定一个正整数,返回它在 Excel 表中相对应的列名称。例如: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB ...示例 1:输入: 1输出: “A”示例 2:输入: 28输出: “AB”本质上...原创 2019-12-18 09:55:52 · 460 阅读 · 0 评论 -
169. 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2方法一:哈希表时间复杂度:O(n)我们将 nums 迭代一次,哈希表的插入是常数时间的。所以总时间复杂度...原创 2019-12-17 11:39:32 · 231 阅读 · 0 评论 -
160. 相交链表
这道题也是面试当中很常见的考察题,难度简单,但是确实在面试中很考验。编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA= 2, skipB = 3输出:Reference of the node...原创 2019-12-17 10:17:10 · 154 阅读 · 0 评论 -
155. 最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。pop() -- 删除栈顶的元素。top() -- 获取栈顶元素。getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);...原创 2019-12-16 11:43:28 · 119 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易...原创 2019-12-12 10:33:57 · 134 阅读 · 0 评论 -
121. 买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润...原创 2019-12-11 10:59:22 · 176 阅读 · 0 评论 -
100. 相同的树
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。递归方法:/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * }...原创 2019-12-03 00:18:33 · 163 阅读 · 0 评论 -
70. 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。方法一:暴力法func climbStairs(n int) int { if n <= 3 { return n } return climbStairs(n - 1) + climbStairs(n - ...原创 2019-12-02 10:55:09 · 166 阅读 · 0 评论 -
14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。采用自顶向下的二分查找,最终比较相邻两个的公共前缀,在一层一层的往上。func longestCommonPrefix(strs []string) string { if len(strs) == 0 { return "" } else if len(strs)...原创 2019-11-29 18:15:31 · 125 阅读 · 0 评论 -
13. 罗马数字转整数
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。func romanToInt(s string) int { arr := []rune(s) var rev rune = 0 m := map[string]rune{"IV":4, "IX":9, "XL":40, "XC":90, "CD":400, "CM":900} m2 :=...原创 2019-11-29 18:11:41 · 149 阅读 · 0 评论 -
回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。从后往前进行反转,反转后的数字和反转前数字进行比较,如果相同的话就是回文数。func isPalindrome(x int) bool { if x < 0 { return false } var rev int = 0 temp := x...原创 2019-11-29 18:09:52 · 151 阅读 · 0 评论 -
整数反转
题目描述给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321 示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。分析重复...原创 2019-11-27 10:10:12 · 201 阅读 · 0 评论 -
无重复字符的最长子串
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串...原创 2019-04-21 22:30:30 · 132 阅读 · 0 评论 -
两数相加
题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。链表结构如下:public class ListNode { int val; ListNode next; List...原创 2019-04-21 22:12:08 · 221 阅读 · 0 评论 -
两数之和
题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路一最...原创 2019-04-21 21:54:33 · 102 阅读 · 0 评论