随笔分类 -  01【打工前】-leetcode

刷题板块
摘要:leetcode 343 整体来看就是不断对数字进行划分,然后不断求乘积。那么一半的做法应该是递归调用,但是会出现大量的重复,因为每个值对应的最大乘积没有保存 而动态规划的优势和核心思想就在于先变动会先固定下来的,然后把固定下来的值用于更新后固定下来的值的更新,把每一次先变动对应的值都存储下来了,这 阅读全文
posted @ 2020-05-27 11:03 我是SSP 阅读(207) 评论(0) 推荐(0)
摘要:核心思想: 逐渐遍历,如果出现符号则分为左右两侧,用于后续分治 两侧数值已经确定好之后再确定最开始的符号并计算最终的结果 如果已经只有一个数字,没有运算符号,则把这个数字直接加入到结果集中 注意每一次递归都定义了一个List,也就是在递归的结束都会把这个值返回给上一步的结果,用于最终的值的计算。 c 阅读全文
posted @ 2020-05-26 11:41 我是SSP 阅读(167) 评论(0) 推荐(0)
摘要:回溯是 DFS 的一种,它不是用在遍历图的节点上,而是用于求解 排列组合 问题,例如有 { 'a','b','c' } 三个字符,求解所有由这三个字符排列得到的字符串。 在程序实现时,回溯需要注意对元素进行标记的问题。使用递归实现的回溯,在访问一个新元素进入新的递归调用,此时需要将新元素标记为已经访 阅读全文
posted @ 2020-05-21 11:58 我是SSP 阅读(267) 评论(0) 推荐(0)
摘要:leetcode 695 广度优先搜索一层一层遍历,每一层遍历到的所有新节点,要用队列先存储起来以备下一层遍历的时候再遍历;而深度优先搜索在遍历到一个新节点时立马对新节点进行遍历:从节点 0 出发开始遍历,得到到新节点 6 时,立马对新节点 6 进行遍历,得到新节点 4;如此反复以这种方式遍历新节点 阅读全文
posted @ 2020-05-17 22:35 我是SSP 阅读(203) 评论(0) 推荐(0)
摘要:BFS BFS的典型案例就是走迷宫,每一步不是一直往前走,而是要考虑当前同步内有几个能走的,再从这么多个里面继续往下走。 广度优先搜索一层一层遍历,每一层遍历到的所有新节点,要用队列先存储起来以备下一层遍历的时候再遍历;而深度优先搜索在遍历到一个新节点时立马对新节点进行 遍历:从节点 0 出发开始遍 阅读全文
posted @ 2020-05-17 12:33 我是SSP 阅读(360) 评论(0) 推荐(0)
摘要:1⃣️普通库函数排序: class Solution { public int findKthLargest(int[] nums, int k) { Arrays.sort(nums); return nums[nums.length-k]; } } 2⃣️堆排序: 时间复杂度 O(nlogk), 阅读全文
posted @ 2020-05-16 08:46 我是SSP 阅读(337) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2020-05-15 08:54 我是SSP 阅读(2023) 评论(0) 推荐(0)
摘要:leetcode 69 方法一:袖珍计算器算法 注意: exp和log前面都要加上math,log 最后判断要是<=而不是< 最后两个int相乘机的用较大的long进行处理 时空复杂度均为O(1) class Solution { public int mySqrt(int x) { if(x==0 阅读全文
posted @ 2020-05-14 22:13 我是SSP 阅读(247) 评论(0) 推荐(0)
摘要:这道题看题意,很明显是我博文里面写过的有关贪心算法的两种说法之一,也就是满足每个孩子胃口的情况下,最多能喂饱多少个孩子,只不过这里的胃口变成了一个区间内部出现过的字符不能出现在其他区间,所以第一想到的就是贪心算法。 之后,我疑惑的点是如何保证一个区间里面的字符不会出现在别的区间呢? 核心思想: 策略 阅读全文
posted @ 2020-05-13 20:35 我是SSP 阅读(172) 评论(0) 推荐(0)
摘要:要使字符串s的排序要和字符串t的排序一致,我们只需考虑两个要素 当字符'a'出现,判断字符传t中是否存在字符'a' t中字符‘a'之后的剩余字符串是否存在’b' 用一句通俗的话就是剩余字符串中是否存在下一个字符;利用贪心算法的概念就是局部是否存在最优解。剩余字符串是否存在字符。 注意区分几个字符方面 阅读全文
posted @ 2020-05-13 20:06 我是SSP 阅读(187) 评论(0) 推荐(0)
摘要:题目简化为修改一个数将原本有可能是递减的数组变为递增数组。 如果nums[i-1]<nums[i],则将i-1的数字变为i的数字,因为如果改后面的,有可能会因此而影响后面的比较,使得i的数字大于i+1的数字,所以应尽量优先将nums[i-1]=nums[i] 如果nums[i-2]<nums[i], 阅读全文
posted @ 2020-05-13 18:45 我是SSP 阅读(347) 评论(0) 推荐(0)
摘要:这道题就是苹果数一定的情况下,能不能满足一定数量孩子的胃口。(这里可以参见上一个博文)典型的贪心算法。 class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { int count=0; for(int i=0 阅读全文
posted @ 2020-05-12 18:04 我是SSP 阅读(292) 评论(0) 推荐(0)
摘要:贪心算法一共有两类问题: 1、苹果数量一定,求最多能满足多少个孩子 2、孩子数量一定(要满足某一固定目标),求最少需要多少个苹果。(leetcode 455) 总之,贪心算法就是一个变量一定,求另一个变量最多或者最少值。 官方的说法是贪心算法一般用来解决需要 “找到要做某事的最小数量” 或 “找到在 阅读全文
posted @ 2020-05-11 12:05 我是SSP 阅读(264) 评论(0) 推荐(0)
摘要:核心思路: 给一个孩子的饼干应当尽量小并且又能满足该孩子,这样大饼干才能拿来给满足度比较大的孩子。因为满足度最小的孩子最容易得到满足,所以先满足满足度最小的孩子。 贪心算法在以上的解法中,我们只在每次分配饼干时选择一种看起来是当前最优的分配方法,但无法保证这种局部最优的分配方法最后能得到全局最优解。 阅读全文
posted @ 2020-05-11 10:24 我是SSP 阅读(388) 评论(0) 推荐(0)
摘要:官方解法带视频讲解,推荐先看视频再来看本文的讲解 https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/solution/shu-zu-zhong-de-ni-xu-dui-by-leetcode-solution/ 采用归并 阅读全文
posted @ 2020-05-09 23:48 我是SSP 阅读(217) 评论(0) 推荐(0)
摘要:Java 使用 PriorityQueue<>((x, y) -> (y - x)) 可方便实现大顶堆。 Java 使用 PriorityQueue<>() 可方便实现小顶堆。 一般思路 先排序再进行再遍历取数 使用 O(Nlog⁡N)时间,然后返回中间元素即可(使用 O(1)时间)。 进一步优化 阅读全文
posted @ 2020-05-07 11:37 我是SSP 阅读(173) 评论(0) 推荐(0)
摘要:一、堆: 总的来说如果求最小值就要构建大顶堆,反之小。 大小顶堆原则:每个节点都比其左右节点大或者小(也就是说他的约束只在三个节点,但原则对全局节点限制),不能保证高层数据一定大于底层数据(也有可能出现等于),同层的数据左右没有一定的大小顺序,以下两种均为正确的大顶堆。正是由于只能保证高层数据大于等 阅读全文
posted @ 2020-05-05 15:14 我是SSP 阅读(770) 评论(0) 推荐(0)