心心喵
这个作者很懒,什么都没留下…
展开
-
[算法导论] 421. 数组中两个数的最大异或值
0. 题目性质1:a ^ a = 00 ^ a = a性质2:a ^ b = c (1)a ^ c = b (2)b ^ c = a (3)(1)、(2)、(3)等价。(1) ^ b 得到 a ^ b ^ b = c ^ b 得到 a = c ^ b。我们只用关心这个最大的异或值需要满足什么性质,进而推出这个最大值是什么,而不必关心这个异或值是由哪两个数得来的。1. 二进制下,越高位上越能出现“1...原创 2022-05-29 03:34:00 · 376 阅读 · 0 评论 -
[算法导论] 异或找数(出现次数为奇数次)
0. 题目在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字。1.list1 = [3,1,1,1,2,2,1,3,4]result = 0for i in temp: result = result ^ i #异或print(result) public static void main(String[] args) { int[] in = new int[]{9,3,3,4,5,4,5,8,6,6,8}; int resul.原创 2022-05-28 19:26:46 · 232 阅读 · 0 评论 -
[算法导论] 树拓扑
输入 6 1 2 1 3 3 (i+2与l[i]相连,其中i从1开始)输出 4 5 6 1 3 2数组 i ... (2~n)f(i) ...n = int(input())l = list(map(int,input().split()))#M = [[0]*(n+1) for _ in range(n+1)]d = {}stack = []out = []for i in range(2,n+1): #2...n if i not in ...原创 2022-05-14 21:19:45 · 241 阅读 · 0 评论 -
[算法导论] 根据螺旋组合排序后尾字母,求原字符串
根据(原始字符串螺旋复制的组合排序后) 的尾字母序列, 求原字符串。目录二、 图算法一、暴力破解二、 图算法一、暴力破解原创 2022-04-29 16:16:42 · 218 阅读 · 0 评论 -
[算法导论] 480. 滑动窗口中位数
0. 题目一、大根堆(负数)+小根堆class Solution: import heapq def medianSlidingWindow(self,nums, k): n = len(nums) if not nums: return [] if k>=n: nums.sort() if n%2==1: # 0 0 0 l=3 0 0 l=2原创 2022-04-27 01:04:44 · 211 阅读 · 0 评论 -
[算法导论] 1004. 最大连续1的个数 III
双指针也可以前向dp+反向dp来做。空间复杂度可以用ll和rr来优化。class Solution(object): def longestOnes(self,nums,k): left, right = 0, 0 res = 0 #遍历右指针 for right in range(len(nums)): if nums[right]==0: #右指针会出现的情况 .原创 2022-04-27 00:54:12 · 226 阅读 · 0 评论 -
[算法导论] 40. 组合||
一、 组合||class Solution(object): # [1,1,2,5] 前后两个1都可以和2,5组合。所以需要去重。考虑如果当前元素==前一个元素,则跳过。 def combinationSum2(self, candidates, target): def dfs(target,tmp,idx): if target<0: return if target==0:原创 2022-04-27 00:51:42 · 227 阅读 · 0 评论 -
[算法导论] 手写系列—2.LR
一、LR对 对数几率 进行 线性分类器建模。log p/(1-p) = w*x+bp = 1 / 1+e^(-w*x-b)import numpy as npfrom sklearn import preprocessingfrom sklearn import datasetsclass LogisticRegression: def __init__(self,learning_rate=0.1,lamb=0.001,iters=1000,kernel='s...原创 2022-04-25 18:30:03 · 267 阅读 · 0 评论 -
[算法导论] 数组的相同元素,用后面的元素打乱顺序
1 |3 3 3| (2 4) -> 1 |3 (2) 3 (4) 3|1 3 3 34 -> 1 3 4 3 3特例:2 2 2 3 2 -> 2 3 2 2 2 (这个时候,用后面元素插入后会出现并没有真正打乱的现象)# 打乱顺序# nums = [4, 3, 3, 3, 2, 3] # 4...原创 2022-04-22 16:19:57 · 289 阅读 · 0 评论 -
[算法导论] 部队集合 — 攻防和最大,攻击和>=0, 防御和>=0
acdream 1715(贪心)_路小白_zZ的博客-优快云博客0. 题目一共有n个士兵,其中给定每个士兵的攻击与防御。熊熊首领可以选择士兵,也可自己出征(攻防都为0),怎样选择攻防和最大,且攻击和>=0,防御和 >=0。1. 暴力破解 超时最先想到暴力破解 dfs回溯,但是超时。2. 贪心题解:把攻击数组和防御数组都排序,然后两个数组首尾相加,如果和都大于等于k,满足条件。...原创 2022-04-20 20:39:30 · 356 阅读 · 0 评论 -
[算法导论] 矩阵乘法 @、np.dot()、手写
python之np.argmax()及对axis=0或者1的理解 - 百度文库axis = 0 是列,axis = 1是行。一、python 3种矩阵乘法1.1 @符号的乘法import numpy as npa = np.array([[2,3],[1,2],[3,1]])b = np.array([1,2,3],[2,1,3])res1 = a @ bprint(res1) # [[8 7 15][5 4 9][5 7 12]]1.2 numpy包的dot()res原创 2022-04-19 12:36:03 · 1571 阅读 · 0 评论 -
[算法导论] 手写系列—1.attention & 交叉熵 & ID3
【手撕Self-Attention】self-Attention的numpy实现和pytorch实现_顾道长生'的博客-优快云博客1. 无碉堡,手写 self_attention_layer注意:1. q、k维度相同,v维度可以不同(=输出维度)2. 矩阵乘法np.matmul(m,n)。 矩阵点乘 np.multiply(m, n)。2. 手写交叉熵损失(2元/多元)1. 不确定性是 -logp,信息熵是 sum_i(- pi * logpi),交叉熵 -y_c原创 2022-04-19 11:38:32 · 1661 阅读 · 0 评论 -
[算法导论] 巴什博弈 : 最后拿石子的获胜
巴什博弈心心和臭熊熊在玩游戏,有n个石子,每人可以随便拿1~m个石子,两个人轮流拿石子,最后拿的人胜利。总共有n个石子,假设心心先手,心心和臭熊熊轮流拿石子,每次都可以拿1~m个石子。如果心心先手,请写出函数判断心心是否能胜利。当石子有 1~m 个时,毫无疑问,先手必胜。当石子有 m+1 个时,先手无论拿几个,后手都可以拿干净,先手必败。当石子有 m+2~2m时,先手可以拿走几个,剩下m+1个,先手必胜。我们不难发现,面临 m+1个石子的人一定失败。1. 如果心心面临 n %原创 2022-04-16 01:08:36 · 7765 阅读 · 0 评论 -
[算法导论] 51.N皇后
0. 题目力扣1. 经典回溯n*n的棋盘上,n个皇后 每一行 每一列放一个。任何两个皇后都不能在同一行、同一列以及同一条斜线上。class Solution(object): def solveNQueens(self, n): """ :type n: int :rtype: List[List[str]] """ # n*n的棋盘上,n个皇后 每一行 每一列放一个 # 任何两原创 2022-04-13 13:42:38 · 381 阅读 · 0 评论 -
[算法导论] 骑士问题(周游问题 /最短路问题 )
目录一、周游问题 (骑士只能走日字(L 形))1.1 题目1.2 深度优先搜索二、目标最短路问题 (骑士只能走日字(L 形))一、周游问题 (骑士只能走日字(L 形))参考:Python----DFS---骑士周游问题 - TomHawk - 博客园python深度优先搜索算法解决骑士周游问题_weixin_42353399的博客-优快云博客_骑士周游问题python1.1 题目考虑nn大小的国际象棋棋盘上某个位置的一只马,按照马走“日”的规则,它是否可能只走n*...原创 2022-04-12 09:44:16 · 418 阅读 · 0 评论 -
[算法导论] 摆渡车问题:最早运送完成的时间
0. 题目一共m辆车。一次摆渡只能运送n辆车。运送的时间为x。每辆车的到达时间用数组a表示。求将所有车运送到对岸所需的时间最早为多少(t2)。运送次数最少为(t1)。1. 代码m,n,x = map(int,input().split())#m辆车,每次最多运送n车,摆渡单程时间x a=[10,40,30]a = [0]*(m+1)for i in range(1,m+1): a[i]=int(input())a.sort()tmp = m%n #3%2==1...原创 2022-04-11 11:28:28 · 467 阅读 · 0 评论 -
[算法导论] 111.二叉树的最小深度
0. 题目1. 递归o(n) o(height)时间复杂度树的每个节点都要遍历,因为对于每个节点的深度,都要遍历左右子树,得到左右节点的深度。空间复杂度 栈的深度。# 最小深度:节点个数。class Solution: def minDepth(self, root): # 注意:如果5个结点是在一边,那就是5,而不是1。 if not root: return 0 if not root.left: #左...原创 2022-03-28 16:33:26 · 427 阅读 · 0 评论 -
[算法导论] 三种颜色的兔子
满足其中任意两数之差的绝对值是3的倍数即可。原创 2022-03-12 18:48:22 · 594 阅读 · 0 评论 -
[算法导论] 力扣高频1-100题 —— 【一刷方法总结】
本文回顾高频前100题,分为方法进行总结。对于常用的方法,给出经典例题。下一章,给出不同问题场景 (字符串/数组/矩阵) ,分别会对应哪些方法。目录1. 动态规划2. 递归dfs / 回溯 / 层序遍历bfs3. 单调栈4. 前缀和5. 双指针6. 排序类: 快排/堆排/归并7. 链表操作:头插(反转链表)/快慢指针(链表判环/找环头)1. 动态规划72.编辑距离300.最长递增子序列2. 递归dfs / 回溯 / 层序遍历bfs200.岛屿数量..原创 2022-03-01 22:29:06 · 918 阅读 · 0 评论 -
[算法导论] 39. 组合总和
0. 题目1. 回溯找出无重复元素的整数数组,组成target的所有可能。可以按任意顺序返回这些组合。注意:res.append(tmp[:]) #这里不能append动态变化的tmp!!!class Solution(object): def combinationSum(self, candidates, target): candidates.sort() res = [] # DFS [2,3,6,7] 7...原创 2022-02-27 01:57:20 · 168 阅读 · 0 评论 -
[算法导论] 135. 分发糖果
0. 题目1. 两次遍历 o(n) o(n)class Solution(object): def candy(self, ratings): n = len(ratings) if n==1: return 1 nums = [1]*n #第一次遍历 102:1 1 2 for i in range(1,n): if ratings[i]>ratings[i-1]:原创 2022-02-26 16:59:57 · 193 阅读 · 0 评论 -
[算法导论] 11. 盛最多水的容器
0. 题目类似接雨水,双指针,单调递减栈。1. 双指针 o(n) o(1)6 4 ->6 5(4)长板进一,无论改不改变最小高度,都不会让面积更大。class Solution(object): def maxArea(self, height): l,r=0,len(height)-1 res=0 while l<r: res = max(res,(r-l)*min(height[r.原创 2022-02-26 12:04:09 · 262 阅读 · 0 评论 -
[算法导论] 718. 最长重复子数组
0. 题目1. 滑动窗口 o((N+M)*min(N,M)) o(1)class Solution(object): def findLength(self, nums1, nums2): def maxLength(a,b,l): #比较nums1[:] nums2[:] res=tmp=0 for i in range(l): #取不到l if nums1[a+i]==n..原创 2022-02-25 23:25:57 · 215 阅读 · 0 评论 -
[算法导论] 105. 从前序与中序遍历序列构造二叉树
0. 题目preorder、inorder 构造二叉树1.先序:根->左->右 L 得到根结点:先序第一个元素为 根结点。中序:左->根->右 ^ 找到根:根前一位:左子树根结点,根后一位:右子树根结点class Solution(object): #返回TreeNode def buildTree(self, preorder, inorder): # 先序:根->左->右 L 得到...原创 2022-02-25 17:38:29 · 339 阅读 · 0 评论 -
[算法导论] 剑指 Offer 51. 数组中的逆序对
0. 题目1. 归并排序 o(nlogn) o(n)在 l1[i] <= l2[j] 时,self.c 更新 i位置元素与后面元素形成的 逆序对 j (因为j是从0开始,而不是mid+1开始,所以不用)class Solution(object): # 求逆序对总数 def reversePairs(self, nums): #归并排序 def mergeSort(nums): n = len(nums) .原创 2022-02-25 14:23:01 · 455 阅读 · 0 评论 -
[算法导论] 179. 最大数
0. 题目非负整数数组,组成最大的整数。1. 自定义比较函数 nums.sort(key=cmp_to_key(lambda x,y:..))class Solution(object): def largestNumber(self, nums): nums.sort(key=cmp_to_key(lambda a,b: int(str(b)+str(a))-int(str(a)+str(b)))) #表达式为负,a在前。(表达式<0时(a优先级高),a原创 2022-02-23 19:53:34 · 143 阅读 · 0 评论 -
[算法导论] 剑指 Offer 36. 二叉搜索树与双向链表
0. 题目1. 中序遍历 o(N) o(N)class Solution(object): def treeToDoublyList(self, root): def ltr(cur): if not cur: return ltr(cur.left) #递归左子树 # 先遍历到最左的结点 if self.pre: #有前驱节点,不是第一个遍历的结点。原创 2022-02-23 17:39:36 · 274 阅读 · 0 评论 -
[算法导论] 104. 二叉树的最大深度
0. 题目1. 递归 o(n) o(height)class Solution(object): def maxDepth(self, root): if not root: return 0 return max(self.maxDepth(root.left),self.maxDepth(root.right))+1原创 2022-02-23 15:58:45 · 285 阅读 · 0 评论 -
[算法导论] 34. 在排序数组中查找元素的第一个和最后一个位置
0.题目1. 两次二分查找 一次寻找第一个元素,一次寻找最后一个元素o(logn) o(1)class Solution(object): def searchRange(self, nums, target): if not nums: return [-1,-1] # 二分查找 一次找第一个位置,一次找最后一个位置 n = len(nums) # 寻找第一个位置 l,r = 0,n-1 # 0,5原创 2022-02-23 15:50:25 · 316 阅读 · 0 评论 -
[算法导论] 343. 整数拆分
0. 题目1. 动态规划o(n^2) o(n)i 拆分成 j 与其他数的乘积。dp[i] = max ( j * (i-j) , j * dp[i-j])dp[i]表示将正整数i拆分成至少两个正整数的和之后,这些正整数的最大乘积。class Solution: def integerBreak(self, n): # n拆分后的最大乘积 # max a*b*(n-a-b) dp = [0] * (...原创 2022-02-21 20:16:27 · 175 阅读 · 0 评论 -
[算法导论] 剑指 Offer 40. 最小的k个数
0. 题目1. 排序 o(nlogn) o(logn) 快排空间复杂度class Solution: def getLeastNumbers(self, arr, k): arr.sort() return arr[:k]2. 大根堆 实时维护数组的前 k 小值 o(nlogk) o(k)我们用一个 大根堆 实时维护数组的前 k 小值。首先将前 k 个数插入大根堆中,随后从第 k+1 个数开始遍历,如果当前遍历到的数比大根堆的堆顶的数要.原创 2022-02-19 23:49:56 · 596 阅读 · 0 评论 -
[算法导论] 445. 两数相加 II (链表相加)
0. 题目1.辅助栈 o(max(m,n)) o(m+n)class Solution(object): def addTwoNumbers(self, l1, l2): # 栈倒序记录 s1,s2=[],[] while l1: s1.append(l1.val) l1=l1.next ...原创 2022-02-19 20:35:02 · 300 阅读 · 0 评论 -
[算法导论] 673. 最长递增子序列的个数
0. 题目1. 动态规划 o(n^2) o(n)dp[i] : 最长递增序列的长度cnt[i] : 最长递增序列的个数dp[i] = max(dp[j])+1 0<=j<i & nums[j]<nums[i]cnt[i] = cnt[j] dp[j]+1>dp[i] 更新序列最长个数cnt和dp[i]c...原创 2022-02-19 18:11:58 · 291 阅读 · 0 评论 -
[算法导论] 剑指 Offer 42. 连续子数组的最大和
0. 题目1. tmp<0也要比较,因为可以是负数。o(n) o(1)class Solution: def maxSubArray(self, nums): res = nums[0] tmp = 0 for x in nums: tmp += x res = max(res,tmp) #tmp<0也要比较,因为可以是负数。 if tmp<0原创 2022-02-19 00:46:36 · 317 阅读 · 0 评论 -
[算法导论] 611. 有效三角形的个数
0. 题目三角形,每组 两边之和大于第三边。简化为:两个小边之和大于第三边。nums 包含的元素为非负整数,即除了正整数以外,nums 还会包含 0。故升序排序。 1 2 2 3 41. 排序+二分查找 o(n^2logn)1.1 固定较小的两个边,根据三角形 两边之和大于第三边 这一性质,可以二分查找最大的边的范围。python内置函数 bisect.bisect_leftclass Solution: def triangleNumber(self,...原创 2022-02-18 23:57:27 · 457 阅读 · 0 评论 -
[算法导论] 287. 寻找重复数
0. 题目1. 排序、遍历一遍数组重复即返回class Solution(object): # 所有元素[1,l-1], 只有一个重复整数 def findDuplicate(self, nums): l = len(nums) # 排序 nums.sort() # 遍历一遍,重复即返回 for i in range(1,l): if nums[i]==nums[i-1]:原创 2022-02-18 17:35:03 · 132 阅读 · 0 评论 -
[算法导论] 32. 最长有效括号: ()序列的长度
0.题目从可消除的角度讲,不断消除(),如果能完全消除,即为有效括号。1. 栈记录下标,(入栈,)出栈,保持栈不空 o(n) o(n)类似最大矩形的问题的处理方式。class Solution(object): def longestValidParentheses(self, s): stack = [-1] res = 0 l = len(s) for i in range(l): #-1()()原创 2022-02-17 23:56:11 · 119 阅读 · 0 评论 -
[算法导论] 297. 二叉树的序列化与反序列化
0.题目给定一个二叉树,可以用 先序遍历dfs/中序遍历/后序遍历 /层次遍历bfs serialize函数编码,然后 deserialize解码函数。1. 深度优先搜索 dfs o(n) o(n)## dfs先序遍历 编码再解码class Codec: def serialize(self, root): #先序遍历编码 Tree->'1,2,3' ...原创 2022-02-17 14:52:11 · 104 阅读 · 0 评论 -
[算法导论] 470. 用 Rand7() 实现 Rand10()
0. 题目(力扣题解有问题,不要看力扣)按位运算符有左移运算符(<<)、右移运算符(>>)、按位与运算(&)、按位或运算(|)、按位取反运算(~)、异或运算符,其中按位取反运算符为单目运算符1. 古典概型 python超时 o(1)最坏o(∞) o(1)利用rand7 限定[1-6] ,与运算&1:判断奇偶性。再用rand7 控制[1-5],奇数返回 [1-5],偶数+5 [6...原创 2022-02-16 22:41:54 · 146 阅读 · 0 评论 -
[算法导论] 279. 完全平方数 (把n分解为l个完全平方数之和,返回最小个数l)
0. 题目把n分解为l个完全平方数之和,返回最小个数l。1. 动态规划 o(n√n) o(n)完全平方数v 去更新j>=v时的 dp数组class Solution: # 把n分解为l个完全平方数之和,返回最小个数l。 # 完全平方数:1、4、9、16 def numSquares(self, n): m=int(math.sqrt(n)) # 1、2、...、m 组合成n的最小个数。 # 动态规划原创 2022-02-15 19:11:50 · 561 阅读 · 0 评论