02 2019 档案
摘要:[toc] 题目链接 "Unique Paths LeetCode" 注意点 数字很大,结果可能会溢出 解法 解法一:dfs,效率很低。 解法二:dp,走到某一格的位置等于它左边和上面格子的dp值之和。其实只需要一个一维数组也可以实现。时间复杂度O(mn) 解法三:参见 "Code_Ganker的博
阅读全文
摘要:[toc] 题目链接 "Rotate List LeetCode" 注意点 k可能会大于链表长度 解法 解法一:首先遍历一遍链表得到链表的长度,k对其取余数。然后设置快慢指针,快指针先走k步,然后快慢指针一起走,当快指针走到底的时候,慢指针也走到了新的链表头结点的前一个结点,这时候修改快慢指针的指向
阅读全文
摘要:[toc] 题目链接 "Permutation Sequence LeetCode" 注意点 n = 1 && n = 1 && k & nums) { int n = nums.size(),i = n 2,j = n 1; while(i = 0 && nums[i] = nums[i+1])
阅读全文
摘要:[toc] 题目链接 "Merge Intervals LeetCode" 注意点 区间是无序的 每个区间start一定小于end 解法 解法一:首先以start的值从小到大来排序,排完序我们就可以开始合并了。先把第一个区间存入ret,然后从第二个开始遍历所有区间,如果与ret中最后一个区间有重叠就
阅读全文
摘要:[toc] 题目链接 "Jump Game LeetCode" 注意点 解法 解法一:贪心算法,只关注能到达最远距离,如果能到达的最远距离大于结尾说明能到达,否则不能。并且如果i超过了能到达的最大距离说明不能到达,因为i是每次加一都能超过最大距离,小于i的所有位置都会走到某个最远距离为0的位置。时间
阅读全文
摘要:[toc] 题目链接 "Group Anagrams LeetCode" 注意点 字母都是小写的 解法 解法一:用一个字符串表示strs[i]中出现的字母,比如: 、 。同时用map保存hash与vector的下标对应关系。时间复杂度O(n) 解法二: 与 的区别只在于顺序不同,因此,只要对strs
阅读全文
摘要:[toc] 题目链接 "Combination Sum II LeetCode" 注意点 数字不能重复使用 解法 解法一:和 "Combination Sum" 这道一样,递归的时候跳过重复数字,并且参数改为i+1。 小结 递归题
阅读全文
摘要:作业地址 :https://edu.cnblogs.com/campus/fzu/2019/homework/2610 作业提交准则 得分榜 千帆竞发图 本次作业 优点 在作业难度大幅提高的情况下,大多数同学都尽自己所能提交了作业。 很多同学按照题目的方向,尽力去探索,进一寸有进一寸的收获。 博客的
阅读全文
摘要:[toc] 题目链接 "Rotate Image LeetCode" 注意点 不能开新的二维数组 解法 解法一:先以对角线为轴对调数字,在将每一行逆序即可。时间复杂度O(n^2) class Solution { public: void rotate(vector & matrix) { int
阅读全文
摘要:[toc] 题目链接 "Combination Sum LeetCode" 注意点 数字可以重复使用 像这种结果要求返回所有符合要求解的题十有八九都可以用递归 解法 解法一:要先给数组排序,然后遍历,如果当前数字大于target,说明肯定无法组成target,由于排过序,之后的也无法组成target
阅读全文
摘要:[toc] 题目链接 "Valid Sudoku LeetCode" 注意点 题目要求判断的是当前的矩阵是否为数独矩阵,也就是当前给出的矩阵中每一行每一列每一个小矩阵是否有重复的数字 解法 解法一:三个标志矩阵,分别记录各行,各列,各小方阵是否出现某个数字,其中行和列标志下标很好对应,就是小方阵的下
阅读全文
摘要:[toc] 题目链接 "Find First and Last Position of Element in Sorted Array LeetCode" 注意点 可能为空 时间复杂度为O(logn) 解法 解法一:最普通的二分搜索,先找到一个target,然后向两边拓展。 class Soluti
阅读全文
摘要:[toc] 题目链接 " Permutations II LeetCode" 注意点 不确定有几种排列 解法 解法一:因为有重复的数字所以排列的个数不确定几个,一直生成新的排列直到和原始的数列相同为止 小结 利用 "Next Permutation LeetCode" 的函数来求下一个全排列
阅读全文
摘要:[toc] 题目链接 "Rotting Oranges LeetCode" 注意点 解法 解法一:bfs。首先先统计所有新鲜的橘子数目 ,如果 大于0则一直执行bfs。我们只处理昨天刚腐烂的橘子, 的值就表示第几天腐烂的橘子,由于新鲜橘子的值一开始就是2,所以每次修改的时候都要改为 即 (2是本来就
阅读全文
摘要:[toc] 题目链接 "Search in Rotated Sorted Array LeetCode" 注意点 题目给的序列是一个有序数组按某个轴旋转后的数组 要求时间复杂度为O(logn) 解法 解法一:根据题目的时间复杂度O(logn)要求,很容易想到要用二分搜索。但是二分搜索要求数组是有序的
阅读全文
摘要:[toc] 题目链接 "Permutations LeetCode" 注意点 n个数字共有 个全排列 解法 解法一:每一个排列用 "Next Permutation LeetCode" 中的函数生成,一共有 个。时间复杂度O(n)。 小结 排列题,有许多变种
阅读全文
摘要:[toc] 题目链接 "Next Permutation LeetCode" 注意点 如果是字典序最大的串则要返回字典序最小的串 解法 解法一:参见:http://www.cnblogs.com/grandyang/p/4428207.html 时间复杂度O(n)。 class Solution {
阅读全文
摘要:[toc] 题目链接 "Remove Duplicates from Sorted List LeetCode" 注意点 可能重复的数字不止两个,例如: 解法 解法一:一道简单题,注意不要访问空结点就好。如果相邻两个数字相等就把前一个的指针指向后一个的下一个即可。时间复杂度O(n)。 小结 链表题
阅读全文
摘要:[toc] 题目链接 "Min Cost Climbing Stairs LeetCode" 注意点 注意边界条件 解法 解法一:这道题也是一道dp题。dp[i]表示爬到第i层的最小cost,想要到达第i层只有两种可能性,一个是从第i 2层上直接跳上来,一个是从第i 1层上跳上来。所以可以得到 。时
阅读全文
摘要:[toc] 题目链接 "Climbing Stairs LeetCode" 注意点 注意边界条件 解法 解法一:这道题是一题非常经典的DP题(拥有非常明显的重叠子结构)。爬到n阶台阶有两种方法:1. 从n 1阶爬上 2. 从n 2阶爬上。很容易得出递推式: 于是可以得到下面这种最简单效率也最低的解法
阅读全文
摘要:[toc] 算法介绍 wiki "并查集" 通俗解释 "零基础学并查集算法" 算法实现(C语言) Find函数(未采用路径压缩) Find函数(路径压缩递归实现) Find函数(路径压缩非递归实现) Join函数 算法实战 "HOJ 1232" 修改的地方是每相连两个城镇需要额外多一步 —— 减少道
阅读全文
摘要:[toc] 题目链接 "Satisfiability of Equality Equations LeetCode" 注意点 必须要初始化pre 解法 解法一:典型的并查集算法应用。先遍历所有等式,将等号两边的字母加入同一分类,每类中的字母都是相等的。然后遍历不等式,如果不等号两边的字母属于同一类则
阅读全文
摘要:[toc] 题目链接 "Add Binary LeetCode" 注意点 考虑开头数字有进位的情况 如何将string和int之间转化 解法 解法一:carry表示当前是否有进位,从尾部开始逐位相加。时间复杂度O(n) 解法二:解法一中to_string效率太低了,仔细思考会发现其实真正可能出现的数
阅读全文
摘要:作业地址 :https://edu.cnblogs.com/campus/fzu/2019/homework/2608 作业提交准则 得分榜 千帆竞发图 本次作业 优点 编程语言百花齐放,有C、C++、python等 开放题解决思路各有秋千,略胜一筹的同学博客观光车 "陈翰泽" 许多同学对开放题都思
阅读全文
摘要:[toc] 题目链接 "Plus One LeetCode" 注意点 考虑开头数字有进位的情况 解法 解法一:如果当前数字是9就变为0,否则就+1,并return。时间复杂度O(n) 小结 链表是很常见的一种数据结构,要花点时间专门研究一下。
阅读全文
摘要:[toc] 题目链接 "Swap Nodes in Pairs LeetCode" 注意点 考虑链表为空 解法 解法一:维护三个指针,前中后,调换这三个位置的next指针即可。时间复杂度O(n) 小结 链表是很常见的一种数据结构,要花点时间专门研究一下。
阅读全文
摘要:[toc] 命令 LaTex中字体大小由以下命令控制: 效果图
阅读全文
摘要:[toc] 题目链接 "Merge k Sorted Lists LeetCode" 注意点 给出了链表是有序的 解法 解法一:暴力。用map收集所有链表的数据,然后排序生成新链表。时间复杂度O(kn) 解法二:分治法。比如6个链表,先合并14、25、36。然后合并13,最后和2合并即可。要用到 "
阅读全文
摘要:[toc] 题目链接 "Generate Parentheses LeetCode" 注意点 解法 解法一:递归。当left right的时候返回(为了防止出现 ) 解法二:网上看来的方法。也需要递归,把n 1中生成的字符串中的每一个 后面加上一个 然后把和这个 配对的 一起去掉。最后加上一个 就形
阅读全文
摘要:[toc] 题目链接 "Length of Last Word LeetCode" 注意点 "a "这样的串应该return 1而不是0 有空串或者串中只有0的情况 解法 解法一:从尾巴开始,遇到非空格就字符+1,如果是空格,为了排除以空格结尾的串的影响,只有已经有字符出现了才返回当前统计的字符数。
阅读全文
摘要:[toc] 题目链接 "Maximum Subarray LeetCode" 注意点 最大值有可能是正负数交替着出现 解法 解法一:一次遍历即可。当sum小于0的时候就重新开始求和,因为sum小于0再加上一个数字绝对不可能是max(即sum+nums[i] & nums) { int max = n
阅读全文
摘要:[toc] 题目链接 " Count and Say LeetCode" 注意点 输入的序列可能小于等于0 解法 解法一:观察题目给的序列,加上网上的评论,可以看出从第二个序列开始,每个序列是对前一个序列的报数。例如,前一个序列是1211,那下一个序列就是1个1、1个2、2个1 = 111221。也
阅读全文
摘要:[toc] 介绍 在计算机科学中,二分搜索(英语:binary search),也称折半搜索(英语:half interval search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找
阅读全文
摘要:[toc] 题目链接 "Search Insert Position LeetCode" 注意点 输入的数组是有序的 有可能是要插入头或尾 解法 解法一:遍历数组找到两个数字 ——左边的小于target右边的大于target。时间复杂度为O(n) 解法二:二分查找,和查找数字略有不同,结束条件为le
阅读全文
摘要:[toc] 题目链接 "Implement strStr() LeetCode" 注意点 输入的数组是无序的 解法 解法一:暴力解法,当haystack[i]等于needle[0]的时候说明接下来的串有可能会是needle, 于是我们逐个遍历判断是否真的是needle。时间复杂度为O(nm) cla
阅读全文
摘要:[toc] 题目链接 "Remove Element LeetCode" 注意点 输入的数组是无序的 解法 解法一:使用了erase函数,将等于val的值移除。时间复杂度为O(n) 解法二:来自官方题解。将不等于val的值移到前面。时间复杂度为O(n) class Solution { public
阅读全文
摘要:[toc] 题目链接 "Remove Duplicates from Sorted Array LeetCode" 注意点 解法二要考虑输入为空的情况 解法 解法一:只要两行!超级简单,使用了 "unique函数" 。时间复杂度为O(n) 解法二:来自官方题解。维护两个指针,i是慢指针,j是快指针。
阅读全文
摘要:[toc] 题目链接 "Remove Nth Node From End of List LeetCode" 注意点 考虑删除的结点是开头的那个结点 输入给的链表是没有开头的"哑结点"的 解法 解法一:先在开头加一个哑结点,这样可以简化后面的处理。一次遍历统计有多少个结点。然后再一次遍历找到倒数第n
阅读全文