Algorithm
文章平均质量分 52
natsuiroginga
这个作者很懒,什么都没留下…
展开
-
LeetCode 96. Unique Binary Search Trees
动态规划,dp[i]表示i个节点的二叉搜索树的个数,dp[i] = dp[0] * dp[i-1] + dp[1] * dp[i-2] + …+ dp[i-1] * dp[0]。给定一个整数n,返回有n个节点的二叉搜索树的个数。原创 2023-05-12 20:04:25 · 99 阅读 · 0 评论 -
LeetCode 714. 买卖股票的最佳时机含手续费
给定一个整数数组prices,其中第i个元素代表了第i天的股票价格;非负整数fee代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。原创 2023-05-07 21:57:54 · 76 阅读 · 0 评论 -
LeetCode42. 接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。原创 2023-05-04 23:01:17 · 408 阅读 · 0 评论 -
LeetCode55. 跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。原创 2023-05-03 19:59:48 · 922 阅读 · 0 评论 -
LeetCode347. 前 K 个频繁元素
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。原创 2023-05-01 23:31:49 · 529 阅读 · 0 评论 -
LeetCode 785. 判断二分图
给定一个无向图graph,当这个图为二分图时返回true。如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: graph[i] 中不存在i,并且graph[i]中没有重复的值。原创 2023-04-28 21:47:09 · 693 阅读 · 0 评论 -
LeetCode 15. 三数之和
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得?请你找出所有和为0且不重复的三元组。答案中不可以包含重复的三元组。原创 2023-04-27 23:06:59 · 411 阅读 · 0 评论 -
LeetCode 18. 四数之和
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。答案中不可以包含重复的四元组。原创 2023-04-27 23:06:29 · 415 阅读 · 0 评论 -
LeetCode 501. Find Mode in Binary Search Tree
给定具有重复项的二叉搜索树 (BST) 的根,返回其中的所有模式(即最常出现的元素)。原创 2023-04-26 14:49:04 · 444 阅读 · 0 评论 -
LeetCode 84. Largest Rectangle in Histogram
Given an array of integers representing the histogram’s bar height where the width of each bar is , return the area of the largest rectangle in the histogram.给定一个整数数组,表示柱状图的高度,每个柱子的宽度为,返回柱状图中最大矩形的面积。这道题目的解法是单调栈,单调栈的思路是,维护一个单调递减的栈,当遇到比栈顶元素小的元素时,就计算栈顶元素的面积,原创 2023-04-24 21:25:05 · 373 阅读 · 0 评论 -
leetcode_131 Palindrome Partitioning
Given a string s, partition s such that everysubstringof the partition is apalindrome. Return all possible palindrome partitioning of s.给定一个字符串,将其分割成若干个回文串,返回所有可能的分割方案。原创 2023-04-22 19:51:32 · 555 阅读 · 0 评论 -
Leetcode 337. House Robber III
偷窃者发现了一个新的地方来偷窃。这个地方只有一个入口,称为“根”。除了根之外,每个房子都有一个且只有一个父房子。经过一番观察,聪明的小偷意识到“这个地方的所有房子都形成了一个二叉树”。如果两个直接链接的房子在同一晚上被打破,它将自动联系警察。采用后序遍历的原因是,后序遍历是先遍历左右子树,然后再遍历根节点,这样就可以保证在遍历根节点的时候,左右子树的。确定小偷今晚可以偷窃的最大金额,而不会警告警察。数组已经求解完毕,这样就可以直接使用左右子树的。数组来求解当前节点的。原创 2023-04-20 16:01:03 · 397 阅读 · 0 评论 -
LeetCode 96. Unique Binary Search Trees
动态规划,dp[i]表示i个节点的二叉搜索树的个数,dp[i] = dp[0] * dp[i-1] + dp[1] * dp[i-2] + …+ dp[i-1] * dp[0]。给定一个整数n,返回有n个节点的二叉搜索树的个数。原创 2023-04-18 23:16:15 · 79 阅读 · 0 评论 -
UVA 11078 Open Credit System
给定一个长度为n的整数序列A0,A1,…, An-1,找出两个整数Ai和Aj(i原创 2023-03-28 15:06:46 · 136 阅读 · 0 评论 -
LeetCode 75. Sort Colors
链接: https://leetcode-cn.com/problems/sort-colors/原创 2023-03-28 11:14:22 · 68 阅读 · 0 评论 -
CodeForces 377A Maze
小P非常的喜欢方格迷宫。方格迷宫是一个n*m的由墙和空地构成的长方形方阵。只有当两点满足四联通条件时才能走过去。小P画了一个迷宫,里面所有的空地都是四连通的。但闲着没事干的小P认为自己画的迷宫里小墙太多了很难看,所以他希望能够通过把迷宫中k个格子从空地变成墙但不破坏整张图的连通性(即仍然保持所有空地在一个四连通块中)但是小P太蠢了做不来,请你帮助他。: 第一行n,m,k(描述如题) 第二到n+1行: 每行m个字符,分别是’.‘或’#'。'.‘表示空地,’#'表示墙。原创 2023-03-26 09:58:31 · 192 阅读 · 0 评论 -
B树与B+树
又称,B树中所有结点的孩子个数的最大值称为B树的,通常用m表示。一棵m阶B树或为空树,或为满足如下特性的m叉树:树中每个结点至多有m棵子树,即至多含有m-1个关键字若根节点不是终端节点,则至少有两棵子树除根节点外的所有非叶节点至少有棵子树,即至少含有[m-2]+1个关键字。所有的叶子节点都出现在同一层,并且不带信息(可以视为外部节点或类似于折半查找判定树的查找失败节点,实际上这些节点不存在,指向这些节点的指针为空)。其中,为节点的关键字,且满足;为指向子树根节点的指针,且指针Pi-1。原创 2023-03-24 22:55:45 · 510 阅读 · 0 评论 -
CodeForces 55B Smallest number
链接: https://codeforces.com/contest/55/problem/B。原创 2023-03-24 16:07:36 · 103 阅读 · 0 评论 -
LeetCode 394. Decode String
这样可以减少内存分配的次数,提高性能。拼接字符串时可以使用。原创 2023-03-13 15:57:19 · 79 阅读 · 0 评论 -
LeetCode 844. Backspace String Compare
设置两个栈stack1和stack2, 一个用来存储字符串 s, 一个用来存储字符串 t, 然后遍历两个栈, 如果两个栈的元素相同, 则返回 true, 否则返回 false.原创 2023-03-13 11:16:50 · 225 阅读 · 0 评论 -
LeetCode 299. Bulls and Cows
LeetCode 299. Bulls and Cows。原创 2023-03-12 09:19:41 · 212 阅读 · 0 评论 -
LeetCode 116. Populating Next Right Pointers in Each Node
【代码】LeetCode 116. Populating Next Right Pointers in Each Node。原创 2023-03-11 16:53:38 · 362 阅读 · 0 评论 -
LeetCode 424. Longest Repeating Character Replacement
【代码】LeetCode 424. Longest Repeating Character Replacement。原创 2023-03-11 15:47:17 · 345 阅读 · 0 评论 -
LeetCode 438. Find All Anagrams in a String
【代码】LeetCode 438. Find All Anagrams in a String。原创 2023-03-11 11:12:41 · 333 阅读 · 0 评论 -
Go语言刷题常用数据结构和算法
go语言模拟栈、队列和集合,字符串处理技巧原创 2023-03-09 16:31:01 · 415 阅读 · 0 评论 -
Go刷题常用数据结构和算法
【代码】Go刷题常用数据结构和算法。原创 2023-03-09 15:50:12 · 103 阅读 · 0 评论 -
中序遍历二叉搜索树(BST)及其应用(Go语言实现)
【代码】中序遍历二叉搜索树(BST)及其应用(Go语言实现)原创 2023-03-07 09:19:10 · 99 阅读 · 0 评论 -
快慢指针(Fast-slow Pointers)
解题思路:快慢指针,如果有环,快指针(fast)一定会追上慢指针(slow)。所以, 如果链表有环, 快指针一定会追上慢指针, 二者相遇。题目描述:给定一个单向链表的头指针,判断链表中是否有环。原创 2023-03-03 09:51:53 · 2587 阅读 · 0 评论 -
第六章-回溯算法
回溯法是一种组织搜索的一般技术,有“通用的解题法”之称,用它可以系统地搜索一个问题地所有解或任意解。它可以系统地搜索一个问题地所有解或任意解,既有系统性又有跳跃性。回溯法的基本做法是搜索,它是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种以深度优先方式系统地搜索问题的解的方法称为回溯法。6.1 回溯算法的理论基础6.1.1 问题的解空间应用回溯法求解时,需要明确定义问题的解空间。问题的解空间应至少包含问题的一个最优解。定义了问题的解空间后,还应将解空间组织起来,通常组织成树或图.原创 2022-05-07 18:27:50 · 333 阅读 · 0 评论 -
第五章-贪心算法
在求最优解问题中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。当一个问题具有最优子结构性质和贪心选择性质时,贪心算法通过一系列的选择来得到一个问题的解。5.2 贪心算法的理论基础贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,即贪心选择,从而希望得到的结果是最好或最优的算法。5.2.1 贪心选择性质贪心选择性质是指所求问题可以通过一系列局部最优的选择,即贪心选择来得到。这是贪心算法可行.原创 2022-05-07 18:27:19 · 139 阅读 · 0 评论 -
第四章-动态规划
动态规划的基本思想动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解,每一个解对应于一个值,我们希望找到具有最优值的解。动态规划算法可以用一个表记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。动态规划与分治法的相同点将待求解的问题分解为若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。两者的不同点适用于动态规划求解的问题,经分解得到的子问题往往不是相互独立的而用分治法求解的问题,经分解得到的子问题往往是互原创 2022-05-07 18:26:48 · 218 阅读 · 0 评论 -
第三章-递归与分治策略
前言分治法的设计思想是,将一个难以直接解决的大问题分割成一些规模较小的相同问题,以便各个击破,分而治之。3.1 递归算法程序直接或间接调用自身的编程技巧称为递归算法。递归的优势在于用有限的语句定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。注意:在使用递归策略时,必须有一个明确的递归结束条件,成为递归出口,否则递归将无限进行下去。(死锁)递归算法一般用于解决三类问题:数据的定义是按递归定义的。例如F原创 2022-05-07 18:26:17 · 151 阅读 · 0 评论 -
第一章-算法概述
算法是一系列解决问题的清晰指令,代表着用系统的方法描述解决问题的策略机制。一个算法的优劣可以用时间复杂性和空间复杂性来衡量。1.1 引言1.1.1 算法的描述特征:有穷性确定性输入输出可行性1.1.2 算法的设计穷举搜索法迭代算法递推算法递归算法分治算法贪心算法动态规划算法回溯算法分支限界算法1.2 算法的复杂性1.2.1 时间复杂性定义:执行算法所需要的时间。1.2.2 空间复杂性定义:算法.原创 2022-05-07 18:25:49 · 67 阅读 · 0 评论 -
旅行商问题
#include<iostream>#include<algorithm>#define NUM 100using namespace std;int n; // 图G的顶点数量int m; // 图G的边数int a[NUM][NUM]; //图G的邻接矩阵int x[NUM]; // 当前解int bestx[NUM]; // 当前最优解向量int cc; // 当前费用int bestc; // 当前最优值int NoEdge = -1; // 无边标记原创 2022-05-03 21:34:32 · 75 阅读 · 0 评论 -
图的m着色问题
#include<iostream>#define NUM 100using namespace std;int n; // 图的顶点数量int m; // 可用颜色数量int a[NUM][NUM]; // 图的邻接矩阵int x[NUM]; // 当前的解向量int sum; // 已经找到的可m着色的方案数量// 形参t是回溯的深度 bool same(int t){ int i; for(i = 1; i<=n; i++) if(a[t][i]==原创 2022-05-03 20:55:37 · 185 阅读 · 0 评论 -
装载问题(回溯)
#include<iostream>#include<algorithm>#define NUM 100using namespace std;int n; // 集装箱数量int c; // 轮船的载重量 int w[NUM]; // 集装箱的重量数组 int x[NUM]; // 当前搜索的解向量 int r; // 剩余集装箱的重量int cw; // 当前轮船的载重量int bestw; // 当前最优载重量int bestx[NUM]; // 当前原创 2022-05-03 20:44:05 · 477 阅读 · 0 评论 -
回溯算法.
目录一、 数据结构二、回溯算法搜索子集树三、回溯算法搜索排列树一、 数据结构int x[N]; //解向量二、回溯算法搜索子集树void traceback(int t){ if(t > n) update(x); // 更新解向量 else for(int i=0; i<=1; i++){ x[t] = i; // 每个结点只有两个子树, 0或1 // constraint是约束函数, bound是限界函数(可行性剪枝) if(constrain原创 2022-05-03 20:40:09 · 340 阅读 · 0 评论 -
POJ_1042:Gone Fishing(贪心+枚举)
详解一、题目1. 描述2. 输入3. 输出4. 样例(1) 样例输入(2) 样例输出二、思路分析三、数据结构四、算法一、题目1. 描述John is going on a fishing trip. He has h hours available (1 <= h <= 16), and there are n lakes in the area (2 <= n <= 25) all reachable along a single, one-way road. John s原创 2022-05-03 19:59:15 · 456 阅读 · 0 评论 -
P1896 [SCOI2005]互不侵犯
使用状压dp状压 DP 是动态规划的一种,通过将状态(二进制)压缩为整数(十进制)来达到优化转移的目的状态转移方程: f[i][j][s]=sum(f[i−1][k][s−gs[j]]),f[i][j][s]就表示在只考虑前i行时,在前i行(包括第i行)有且仅有s个国王,且第i行国王的情况是编号为j的状态时情况的总数。而k就代表第i-1行的国王情况的状态编号其中k在1到n之间,j与k都表示状态的编号,且k与j必须满足两行之间国王要满足的关系。#include<iostream原创 2022-04-30 13:47:45 · 122 阅读 · 0 评论