11 2021 档案

摘要:前置题目是300, 对于每个数字, 求得包括其的左递增子序列长度, 和包括其的递减右子列长度, 相加减-即可. class Solution: def calculate_increase_num(self, nums): if not nums: return nums longest_val_l 阅读全文
posted @ 2021-11-22 00:41 茫茫碧落 阅读(24) 评论(0) 推荐(0) 编辑
摘要:子数组指数组中去掉一些元素(也可以不去)并且不改变剩下元素的顺序后产生的数组. 递增子数组指满足元素为递增的子数组. 给到一个数组, 求得最长的递增子数组的长度. 要求复杂度为O(nlogn) 我想了好久没有想出来一个很好的办法, 后来抄别人答案有点搞懂了, 然后又自己写了一遍. 大概是懂了吧, 但 阅读全文
posted @ 2021-11-22 00:32 茫茫碧落 阅读(40) 评论(0) 推荐(0) 编辑
摘要:山峰数组指, 先严格递增, 再严格递减的数组. 现给到一个数组, 找到一个连续子数组, 使得该子数组是山峰数组, 输出最长的该子数组的长度. 要求只遍历一遍数组, 并且空间复杂度为O(1) 想了10分钟知道怎么写, 写了40分钟才debug没问题, 提交了5次前后, 我觉得我是一个sb. class 阅读全文
posted @ 2021-11-22 00:23 茫茫碧落 阅读(50) 评论(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 茫茫碧落 阅读(26) 评论(0) 推荐(0) 编辑
摘要:一个整数队列. 每两个相邻的数都不相同. 找到一个数, 使得其大于相邻的数, 输出该数的index. 如果有多个满足条件的数, 只需要输出任意一个即可. 要求算法复杂度为O(logn) 因为要求算法复杂度是O(n)一定是二分法. 然后容易知道的一点是对于任意满足条件的整数队列, 都可以找到这样的数. 阅读全文
posted @ 2021-11-21 19:33 茫茫碧落 阅读(31) 评论(0) 推荐(0) 编辑
摘要:153的进阶版, 原列表不是严格递增的, 相似, 增加更多的边界判断就可以, 但是极端情况下, 也就是列表中重复的数字过多可能会到O(n)的复杂度. class Solution: def findMinInRange(self, nums: List[int], start, end) -> in 阅读全文
posted @ 2021-11-21 19:01 茫茫碧落 阅读(43) 评论(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 茫茫碧落 阅读(33) 评论(0) 推荐(0) 编辑
摘要:在整数的列表中寻找一个乘积最大的子列, 输出该乘积. 子列指连续的一个区间. 整数有0, 负数和正数. 在非零的情况下, 乘积的绝对值是会随着数组长度的增长而增加的. 首先找到所有的0, 将数组分割为若干个只包含0长度为1的子列和若干个不包含0的子列. 现在求解一个不含0的数组的连续乘积最大值, 如 阅读全文
posted @ 2021-11-17 20:16 茫茫碧落 阅读(41) 评论(0) 推荐(0) 编辑