- 博客(18)
- 收藏
- 关注
原创 152. 乘积最大子数组
区别于最大子序和,乘积有可能负负得正最大,所以维护一个最小值。注意原地更新的问题,这道题看了题解自己写还是出错了,发现问题在于cur, pre, 记录下错的,以免下次再犯:原地更新数组中的某个值,要确保更新前的值后面不再用到这里下一步还要用到更新前的cur_max,但cur_max已经更新。class Solution: def maxProduct(self, nums: List[int]) -> int: if not nums: return 0
2020-06-26 17:07:47 114
原创 53. 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和动态规划输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。分解子问题当前数大于0,当前位置最大和 = 之前的和 + 当前位置,否则当前位置最大和 = 之前的和DP方程base case: 从1开始状态定义:nums[i]表示当前位置连续子串的最大和class Solution: def maxSubA
2020-06-25 23:14:31 91
原创 1143. 最长公共子序列
递归画出递归状态树就很了然了,注意base是-1表示为空。没啥毛病,但是超时了。。。class Solution: def longestCommonSubsequence(self, text1: str, text2: str) -> int: def helper(i, j): if i == -1 or j == -1: return 0 if text1[i] == text2[j]
2020-06-25 20:11:33 87
原创 62&63. 不同路径
62. 不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?class Solution: def uniquePaths(self, m: int, n: int) -> int: dp = [[1] * n] + [[1] + [0] * (n - 1) for _ in range(m-1)]
2020-06-25 16:48:08 149
原创 计算机网络面试高频
文章目录1. OSI七层模型和TCP五层模型2. 面向连接型、面向无连接型3. UDP、TCP是什么?特点及区别4. TCP对应的应用层协议有哪些?UDP呢?5. TCP三次握手6. TCP四次挥手为什么会有TIME_WAIT状态?为什么是四次挥手而不是三次或者五次?ARQ协议?TCP的流量控制TCP拥塞控制1. OSI七层模型和TCP五层模型TCP五层模型相比OSI七层模型,将OSI的应用层、表示层和会话层合为一层:应用层,其他不变。物理层:利用物理传输介质为数据链路层提供物理连接,传输比特流。
2020-06-22 00:18:42 264
原创 55 &45 跳跃游戏
55. 跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。思路:贪心策略,实时维护最远可以到达的位置maxpos=(maxpos, i + num[i])。这个 i + num[i] 超级巧妙的哇!!!emm…也可能是我脑子不大够用QAQ对于当前遍历到的位置 ,如果它在 maxpos的范围内,就可以从起点通过若干次跳跃到达该位置,否则跳出class Solution: def canJump(sel
2020-06-22 00:13:10 118
原创 141. 环形链表
set有重复的都可考虑set dict.keyclass Solution: def hasCycle(self, head: ListNode) -> bool: s = set() while head: if head in s: return True s.add(head) head = head.next return Fals
2020-06-18 23:55:05 103
原创 21. 合并两个有序链表
递归class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: if not l1: return l2 if not l2: return l1 if l1.val <= l2.val: l1.next = self.mergeTwoLists(l1.next, l2) return l1
2020-06-18 23:50:52 89
原创 206. 反转链表
链表是经典的递归定义的数据结构,链表相关的题目常常考察递归递归子问题是什么:除去current node,翻转剩余链表,即除去1, reverseList(2->3->4->5),递归得到的解是 5->4->3->2base case是什么:当前节点为空,返回空,当前节点的next为空(只剩余一个节点),返回该节点处理当前层:翻转链表,即把1->2变为2->1,并释放当前层指向下一层的指针(注意:若不释放,2,3,4指向原本下一个3,4,5的
2020-06-18 22:09:33 83
原创 15. 三数之和
题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]暴力解三层for循环显然很扯。。时间复杂度很高,存在大量冗余。当一个数固定时,剩余两个数的和就固定了,若数组有序,则可根据三数的和决定
2020-06-15 22:09:23 133
原创 283. 移动零
class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ i = j = 0 for i in range(len(nums)): if nums[i] != 0: nu
2020-06-15 20:31:10 81
原创 11. 盛最多水的容器
暴力解:两层for循环,挨个寻找面积最大的。时间复杂度O(n^2)双指针两边移动可想到双指针面积受限于:1 左右的距离 2 最短边的高度所以如果左右两边靠近,只可能是原来min(左,右)的一边移动,因为此时的max(左,右)对面积没有起到作用,再求前后面积的最大值。相比暴力解,抛去了一些冗余。class Solution: def maxArea(self, height: List[int]) -> int: l, r = 0, len(height) -
2020-06-15 20:27:27 76
原创 200. 岛屿数量 python
题目给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3遍历–>两种思路: DFS 或者 BFSDFSclass Solution: def numIslands(self, gri
2020-06-09 23:55:02 879
原创 102. 二叉树的层序遍历 python
BFS模板:deque的结构来模拟队列队列里肯定有一个初始点每次从队列出队一个元素并处理对元素进行扩张(具体要看怎么扩张)满足条件的扩张的点进队列循环处理deque中的元素,直到为空注意:辨识某题是 BFS :是否可衍生出递归状态树,可用dfs,bfs从哪些点开始扩张class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if not root:
2020-06-09 16:50:31 167
原创 104. 二叉树的最大深度
递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def maxDepth(self, root: TreeNode) -> int: if not root:
2020-06-03 15:47:59 92
原创 226. 翻转二叉树
递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def invertTree(self, root: TreeNode) -> TreeNode: if not ro
2020-06-03 11:24:15 138
原创 101. 对称二叉树 python 迭代 递归
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3递归:首先以根节点以及其左右子树,左子树的左子树和右子树的右子树相同,左子树的右子树和右子树的左子树相同,两个条件都要符合所以我们第一个传根节点的左子树和右
2020-06-03 10:56:26 204
原创 1. 两数之和 python 哈希表
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。nums = [2, 7, 11, 15], target = 9[0, 1]暴力时间复杂度O(n^2),可以把查询第二个值的时间复杂度从O(n)降为O(1)哈希表时间、空间复杂度O(n)class Solution: def twoSum(self, nums: List[int], ta
2020-06-01 11:18:39 479
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人