打卡
于对对
这个作者很懒,什么都没留下…
展开
-
算法:相交链表
leetcode:160相交链表求两个单链表相交的起始节点。如图,则返回c1如果不相交,则返回None题解:简单做法,分配两个数组,一边遍历,一遍将链表中的元素存入数组。遇到第一个元素,在另外一个数组中。则是结果难一点的做法:双指针,1->2->34->1->2->3试想:链表1后面加上链表2,1->2->3->4->1->2->3则长度和链表2后面加上链表14->1->2->3->1->原创 2020-08-25 22:16:06 · 163 阅读 · 0 评论 -
算法:最小栈
简单打卡题目:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/min-stack著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。import sysclass MinStack原创 2020-08-24 20:16:38 · 115 阅读 · 0 评论 -
算法:LeetCode231. 2的幂
题目:给定一个整数n,编写一个函数来判断它是否是 2 的幂次方。分析:用计算机来做事,2的幂次方,第一反应,应该想到二进制解题。一个整数转换成二进制是什么样子。应该是一串0+一个1那只要n的二进制不是这个形式,就说明结果是 false解题:若 n = 2^x,且 xx 为自然数(即 nn 为 22 的幂),则一定满足以下条件:恒有n & (n - 1) == 0 或者 n & (-n) == n 或者 n & (-n-1) == 0因为 (公式 -n = ~n+1转载 2020-08-20 10:34:02 · 113 阅读 · 0 评论 -
算法:二叉搜索树的最近公共祖先
解法1:未使用二叉树特性,暴力递归,会超出迭代深度class Solution: def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': p_father = [] self.get_stack(p_father,root,p) q_father = [] self.get_stack(q_fat.原创 2020-08-19 14:50:13 · 109 阅读 · 0 评论 -
算法:像脑筋急转弯一样
今天做的算法题……感觉就像脑筋急转弯,真的让我是一阵凌乱,我还在想,特么的简单题都不会了?第1题:leetcode的Nim游戏。懵逼之处:最优解,题目说是两个人都很聪明,每次都会下出最优解。啥是最优解啊到底……我开始画图,画了半天一直想用动态规划,感觉走火入魔了。倒是摸到一点感觉,就是最后剩下4的时候,轮到对方出手,那我一定赢。但怎么写……受不鸟……看答案。MD,原来就是剩下4个,只要不轮到我,也就是说,只要总数不是4的倍数,我就能赢……函数简单到出乎意料……class Solution:转载 2020-08-18 11:10:09 · 163 阅读 · 0 评论 -
算法:环形链表 II
leetcode 142题:环形链表给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。个人下意识想到的解法:一边遍历,一边将链表的元素存入list,遍历下去会有两种情况:1,当node.next 出现在list中,就说明找到了链表的头部,2,当node.next 为None ,说明这个链表没有环,当然这个方法简单但是比较耗内存。但比较简单直接# Definition for singly-linked list.# class ListNode:# de原创 2020-08-15 16:25:37 · 107 阅读 · 0 评论 -
算法:买卖股票的最佳时机2
题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。题解:此题其实就是求解最后一天的最大收益,每一天有两个状态,持有股票、持有现金。所以可以构成一个动态规划数组:day1day2day3持有股票000持有现金000例如输入的每天的价格数组为:[7,1,5]初始化第一天原创 2020-08-14 10:57:43 · 171 阅读 · 0 评论 -
算法:最大二叉树深度
如题:求的就是二叉树的最大深度。那对于二叉树或者B+树的处理,最主要的两种查询发放就是深度优先、广度优先。此处要求树的高度,第一个想到的是广度优先。如下算法1class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None# 广度优先遍历class Solution: def maxDepth(self, root: Tree原创 2020-08-13 10:28:35 · 124 阅读 · 0 评论 -
打卡:算法:共有多少条不同路径
# 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。## 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。## 问总共有多少条不同的路径?这个题目,明显就是动态规划。初始化第一行和第一列的路径和为1。其他位置的路径总数 = 从上面位置移动到当前位置 + 左边位置移动到当前位置class Solution: def uniquePaths(self, m: int, n: int) -> in原创 2020-08-12 10:47:42 · 409 阅读 · 0 评论 -
打卡:求二叉树的最近公共祖先
二叉树中大多数是从父节点向子节点遍历,例如回溯算法。而这个解法的重点,在于掌握树结构中,从子节点向上遍历父节点的方法。因为子节点没有父节点的信息。所以要构造一个数据,使得子节点包含父节点信息。所以此处采用了map数据结构,将子节点映射到父节点。class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution:原创 2020-08-11 10:58:58 · 68 阅读 · 0 评论