算法
just-solo
这个作者很懒,什么都没留下…
展开
-
分治算法例题
分治算法例题leetcode 23给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6# Defini原创 2021-10-05 10:49:03 · 332 阅读 · 0 评论 -
二分查找模板
二分查找模板基础模板:(适用于查找某个在数组中的数的位置)def searchInsert(self, nums: List[int], target: int) -> int: n = len(nums) l = 0 #注意1 r = n-1 #注意2 while l<=r: mid = l+(r-l)//2 if nums[mid]>tar原创 2021-10-03 21:45:27 · 249 阅读 · 0 评论 -
拓扑排序详解
拓扑排序leetcode 207你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 fa原创 2021-10-03 20:43:49 · 271 阅读 · 0 评论 -
回溯法(以DFS为例)例题总结
回溯法(以DFS为例)例题总结框架: #定义一个结果数组 self.result = [] def dfs(candidates,res): #满足题目,返回条件 if target==sum(res): self.result.append(res[:]) for i in range(len(candidates)): #临时结果添加原创 2020-06-08 21:59:11 · 455 阅读 · 2 评论 -
树的总结(算法)
树的总结(算法)总的来说树需要掌握的由一下几点:1、树的遍历方式:前序(根左右),中序(左根右,二叉搜索树中序遍历必有序),后序(左右根),层序(一个列表,多个列表,之字形)2、树的递归3、树的迭代(利用栈来实现)4、树的创建(列表或者是字典)5、树的动态规划(动态规划里面再讲)下面就具体的一些题目来说一下。首先放一下树递归的GIF图(来自leetcode的一个大佬制作的)上面这个图是递归的基础,必须牢记。我自己总结了一下相应的树的算法。仅供参考。代码都是用python3写的,基本上原创 2020-05-19 13:44:50 · 1615 阅读 · 0 评论 -
数位算法
数位算法快速幂#快速幂class Solution: def myPow(self, x: float, n: int) -> float: a = 1 flag = 1 if n<0: flag = 0 n = abs(n) while n: if n&1: a = a*x n &g原创 2020-09-09 16:45:39 · 400 阅读 · 0 评论 -
动态规划算法专题
动态规划算法专题买卖股票系列这是一类特殊的一维数组动态规划问题。换一种思路。综合一下一共有三种状态dp[i][k][j],dp[i][k][j]代表当前所拥有的金钱或股票。i用来遍历数组元素,k表示交易次数,j代表当前拥有的是金钱还是股票。然后后续可能还有冷冻期,手续费等。冷冻期的话每次循环遍历前需要提前存储一下casetemp,循环结束前再把tempprecase然后再状态转移方程里面用precase操作即可。手续费的话随便在动态转移方程里面减去即可。状态转移方程如下:dp[i][j][0] =原创 2020-07-22 23:49:07 · 854 阅读 · 0 评论 -
回文算法总结
回文算法总结最长回文子串## @lc app=leetcode.cn id=5 lang=python3## [5] 最长回文子串## @lc code=startclass Solution: def longestPalindrome(self, s: str) -> str: size = len(s) if size < 2: return s # 至少是 1原创 2020-07-22 23:17:27 · 1078 阅读 · 0 评论 -
堆栈算法
堆栈算法再讲算法之前先说一下堆与栈的区别两个栈实现队列# -*- coding:utf-8 -*-class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] def push(self, node): # write code here self.stack1.append(node) def pop(s原创 2020-07-21 23:36:52 · 850 阅读 · 0 评论 -
数组算法
数组算法总结二维有序数组的查找(从每一行最后一个找起)# -*- coding:utf-8 -*-class Solution: # array 二维列表 def Find(self, target, array): # write code here if not array: return None row = len(array) -1 col = len(array[0]) -1原创 2020-07-21 23:26:25 · 265 阅读 · 0 评论 -
字符串算法总结
字符串算法总结替换空格(没什么好说的,白给题)class Solution: # s 源字符串 def replaceSpace(self, s): # write code here l = len(s.split(' ')) a = '' for i in range(l-1): a += s.split(' ')[i] + '%20' a = a+s.split(' ')[l-1原创 2020-07-21 22:42:13 · 400 阅读 · 0 评论 -
链表总结
链表总结做链表的题最终的要的是记录每一个新链表的头结点以便最后返回。从尾到头打印链表(因为递归说白了就是从最后一步一步找到最头的节点)# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回从尾部到头部的列表值序列,例如[1,2,3] def printListF原创 2020-07-20 22:08:17 · 168 阅读 · 0 评论 -
二分查找
二分查找标准模板:n = len(nums)left = 0right = n-1while left <= right: #这种写法的原因是为了防止right和left数据过大时造成溢出 mid = left + (right-left)//2 if nums[mid]==target: return mid elif nums[mid]<target: left = mid+1 elif nums[mid]>t原创 2020-06-16 19:14:35 · 186 阅读 · 0 评论 -
并查集
并查集模板:class Solution(): def __init__(self): """ 初始化变量 """ self.tree_num = 0 # 连通集个数 self.tree_node = [] # 根节点所在树的节点总数,被合并的停止更新 self.parent = [] # 每个节点的父亲节点 def initialize_tree(self, total_node):原创 2020-06-16 09:36:33 · 201 阅读 · 0 评论 -
堆栈算法总结
堆栈算法总结模板例题:给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释:对于num1中的数字4,你无法在第二个数组原创 2020-06-14 22:29:34 · 917 阅读 · 0 评论 -
哈希表算法总结
哈希表算法总结著名的空间换时间算法。leetcode1 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: hashmap = {} for i原创 2020-06-12 18:45:52 · 374 阅读 · 0 评论 -
BFS(广度优先遍历)图算法总结
BFS(广度优先遍历)图算法总结首先图算法基本都是用BFS解决的,所以学懂了BFS就会图算法了。例题一:四周扩散型leetcode200leetcode130给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010原创 2020-06-10 22:58:31 · 511 阅读 · 0 评论