随笔分类 -  algorithm

算法相关
摘要:随便打开了一道题, 发现是hard, 然后发现自己居然会写... ` class Solution: def makeLargestSpecialSingle(self, s:str) -> str: # 最左的1和最右的0 相对应的字符串 return "1" + self.makeLargest 阅读全文
posted @ 2023-02-05 08:47 茫茫碧落 阅读(22) 评论(0) 推荐(0)
摘要:三维空间的接雨水 有一点像dijkstar最短路径搜索。 所谓dijkstar, 是有一个closeset的,closeset表明的是已经确定距离的位置。 初始位置是closeset,每次都取与closeset相邻的最近的点放入到closet中。 相邻的点用一个最小堆来维护。 这道题也是一样, 初始 阅读全文
posted @ 2022-03-28 00:28 茫茫碧落 阅读(157) 评论(0) 推荐(0)
摘要:求一个二叉树的右视图. 即从右方看到的元素从上到下的列表. 第一反应是层次遍历, 如果层次遍历的话, 空间复杂度应该是O(n), 第二反应是 如果求右视图相当于把树左右颠倒, 然后求左视图, 那么元素的出现顺序应当是前序遍历的顺序, 但是同一层的元素只取最左的一个. 那么右视图就是一个类似的右向前序 阅读全文
posted @ 2021-12-20 19:54 茫茫碧落 阅读(32) 评论(0) 推荐(0)
摘要:我的想法很简单, 先存一下符号, 然后从小数第一位开始进行记录, 每次都乘10 相除, 直到遇到重复的, 为了防止溢出用了long long class Solution { public: string fractionToDecimal(int numerator, int denominato 阅读全文
posted @ 2021-12-02 22:21 茫茫碧落 阅读(36) 评论(0) 推荐(0)
摘要:前置题目是300, 对于每个数字, 求得包括其的左递增子序列长度, 和包括其的递减右子列长度, 相加减-即可. class Solution: def calculate_increase_num(self, nums): if not nums: return nums longest_val_l 阅读全文
posted @ 2021-11-22 00:41 茫茫碧落 阅读(28) 评论(0) 推荐(0)
摘要:子数组指数组中去掉一些元素(也可以不去)并且不改变剩下元素的顺序后产生的数组. 递增子数组指满足元素为递增的子数组. 给到一个数组, 求得最长的递增子数组的长度. 要求复杂度为O(nlogn) 我想了好久没有想出来一个很好的办法, 后来抄别人答案有点搞懂了, 然后又自己写了一遍. 大概是懂了吧, 但 阅读全文
posted @ 2021-11-22 00:32 茫茫碧落 阅读(49) 评论(0) 推荐(0)
摘要:山峰数组指, 先严格递增, 再严格递减的数组. 现给到一个数组, 找到一个连续子数组, 使得该子数组是山峰数组, 输出最长的该子数组的长度. 要求只遍历一遍数组, 并且空间复杂度为O(1) 想了10分钟知道怎么写, 写了40分钟才debug没问题, 提交了5次前后, 我觉得我是一个sb. class 阅读全文
posted @ 2021-11-22 00:23 茫茫碧落 阅读(59) 评论(0) 推荐(0)
摘要:和 162 一毛一样, 意义何在? class Solution: def peakIndexInMountainArray(self, arr: List[int]) -> int: start = 0 end = len(arr) - 1 while start < end: mid = (st 阅读全文
posted @ 2021-11-21 19:43 茫茫碧落 阅读(29) 评论(0) 推荐(0)
摘要:一个整数队列. 每两个相邻的数都不相同. 找到一个数, 使得其大于相邻的数, 输出该数的index. 如果有多个满足条件的数, 只需要输出任意一个即可. 要求算法复杂度为O(logn) 因为要求算法复杂度是O(n)一定是二分法. 然后容易知道的一点是对于任意满足条件的整数队列, 都可以找到这样的数. 阅读全文
posted @ 2021-11-21 19:33 茫茫碧落 阅读(41) 评论(0) 推荐(0)
摘要:153的进阶版, 原列表不是严格递增的, 相似, 增加更多的边界判断就可以, 但是极端情况下, 也就是列表中重复的数字过多可能会到O(n)的复杂度. class Solution: def findMinInRange(self, nums: List[int], start, end) -> in 阅读全文
posted @ 2021-11-21 19:01 茫茫碧落 阅读(48) 评论(0) 推荐(0)
摘要:旋转过的严格递增列表, 求其中的最小值. 不难, 注意判断边界条件就可以, 算法复杂度应该是O(logn) class Solution: def findMinInRange(self, nums: List[int], start, end) -> int: if start == end: r 阅读全文
posted @ 2021-11-21 18:59 茫茫碧落 阅读(40) 评论(0) 推荐(0)
摘要:在整数的列表中寻找一个乘积最大的子列, 输出该乘积. 子列指连续的一个区间. 整数有0, 负数和正数. 在非零的情况下, 乘积的绝对值是会随着数组长度的增长而增加的. 首先找到所有的0, 将数组分割为若干个只包含0长度为1的子列和若干个不包含0的子列. 现在求解一个不含0的数组的连续乘积最大值, 如 阅读全文
posted @ 2021-11-17 20:16 茫茫碧落 阅读(47) 评论(0) 推荐(0)
摘要:`260. Single Number III Medium 2732 152 Add to List Share Given an integer array nums, in which exactly two elements appear only once and all the othe 阅读全文
posted @ 2021-10-09 17:25 茫茫碧落 阅读(41) 评论(0) 推荐(0)
摘要:一堆数字, 有一个数字只出现一次, 其他数字都出现3次, 找到这个数字, 要求在线性时间和常数空间复杂度解决这个问题. 前置问题是136, 这道题我的想法是, 首先还是要通过位运算来解决这个问题, 我要构建一个计数器一样的东西.当这个位上的数字出现一次, 以三为模来进行计算. 这样就可以解决. 为此 阅读全文
posted @ 2021-10-09 16:59 茫茫碧落 阅读(46) 评论(0) 推荐(0)
摘要:class Solution: """ 只要总和是大于 0 的那么就一定可以找到这样的点, 可以用数学归纳法进行证明 """ def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int: if not gas: retur 阅读全文
posted @ 2021-08-08 23:16 茫茫碧落 阅读(36) 评论(0) 推荐(0)
摘要:class Solution: def cloneGraph_2(self, node, relation_dict): if node in relation_dict: return tmp = Node(val=node.val) relation_dict[node] = tmp for i 阅读全文
posted @ 2021-08-08 20:14 茫茫碧落 阅读(23) 评论(0) 推荐(0)
摘要:##动态规划 easy, 但是速度好像比较慢 ` class Solution: def is_palindrome(self, s): return s[::-1] == s def partition_2(self, s, index, result_dict): tmp = [] for i 阅读全文
posted @ 2021-08-08 00:25 茫茫碧落 阅读(24) 评论(0) 推荐(0)
摘要:https://leetcode.com/problems/surrounded-regions/ 题目要求把四周被X包围的O块去掉. 所以没有被去掉的O块一定是在边上. 我的想法是标记所有于周边相连的O块即可. 具体方法可以依次使用广度优先. ###1, 对周围一圈的O依次使用广度优先(深度优先亦 阅读全文
posted @ 2021-08-07 23:22 茫茫碧落 阅读(48) 评论(0) 推荐(0)
摘要:#原题链接 85. Maximal Rectangle #题目概述 一个矩阵. 矩阵元素是"0", "1"其中之一, 找到一个内部元素为"1"的最大矩阵, #解题思路 想到了84题我的博客 每一行如果都可以得到高度的话,这样这个问题就可以用之前的问题解决. 假设矩形为m * n, 即m行n列. 每一 阅读全文
posted @ 2020-07-08 22:56 茫茫碧落 阅读(177) 评论(0) 推荐(0)
摘要:#原题链接 leetcode web address #题目概述 在一个直方图中, 找到最大的矩形. #解题思路 我一开始想到的解题方法是通过分治的方法进行排序.方法如下,首先找到最小的数字,那么这个最小高度的矩形可以算出,然后分别计算它的左边的部分,和右边的部分,三者之间取最大值. 这种方法的算法 阅读全文
posted @ 2020-07-08 00:07 茫茫碧落 阅读(174) 评论(0) 推荐(0)