
算法
文章平均质量分 51
meraki
这个作者很懒,什么都没留下…
展开
-
算法:模幂运算【快速幂】与力扣372.超级次方
力扣:372.超级次方【模幂运算】【快速幂】1、 题目你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。示例 1:输入:a = 2, b = [3]输出:8示例 2:输入:a = 2, b = [1,0]输出:1024示例 3:输入:a = 1, b = [4,3,3,8,5,2]输出:1示例 4:输入:a = 2147483647, b = [2,0,0]输出:1198提示:1 <= a <= 231 -原创 2022-04-07 19:55:19 · 439 阅读 · 0 评论 -
力扣:300.最长上升子序列(LIS)
力扣:300.最长上升子序列(LIS)1、 题目给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例原创 2022-04-07 16:55:19 · 274 阅读 · 0 评论 -
力扣:1143.最长公共子序列(LCS)
力扣:1143.最长公共子序列(LCS)1、题目(longest-common-subsequence, LCS)给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子原创 2022-04-07 16:21:01 · 466 阅读 · 0 评论 -
力扣:743.网络延迟时间(dijkstra最短路径算法)
力扣:743.网络延迟时间(dijkstra最短路径算法)1、 问题描述有 n 个网络节点,标记为 1 到 n。给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1 。示例 1:输入:times = [[2,1,1],[2,3,1],[3,4原创 2022-04-07 15:45:29 · 406 阅读 · 0 评论 -
力扣:1584.连接所有点的最小费用【kruskal/prim】【结构体和stl速度】
力扣:1584.连接所有点的最小费用【kruskal/prim】【结构体和stl速度】1、 问题描述给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [xi, yi] 。连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 :|xi - xj| + |yi - yj| ,其中 |val| 表示 val 的绝对值。请你返回将所有点连接的最小总费用。只有任意两点之间 有且仅有 一条简单路径时,才认为所有点都已连接。示例 1:输入:p原创 2022-04-01 14:48:08 · 198 阅读 · 0 评论 -
力扣:1584.连接所有点的最小费用【kruskal】【结构体和stl速度】
力扣:1584.连接所有点的最小费用【kruskal】【结构体和stl速度】1、 问题描述给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [xi, yi] 。连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 :|xi - xj| + |yi - yj| ,其中 |val| 表示 val 的绝对值。请你返回将所有点连接的最小总费用。只有任意两点之间 有且仅有 一条简单路径时,才认为所有点都已连接。示例 1:输入:points原创 2022-04-01 12:34:41 · 1135 阅读 · 0 评论 -
力扣:990.等式方程的可满足性【并查集算法解析】
力扣:990.等式方程的可满足性【并查集】1、题目描述给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:"a==b" 或 “a!=b”。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回 true,否则返回 false。示例 1:输入:[“a==b”,“b!=a”]输出:false解释:如果我们指定,a = 1 且 b = 1,那么可以满原创 2022-04-01 10:28:57 · 313 阅读 · 0 评论 -
力扣:185.判断二分图——二分图
力扣:185.判断二分图——二分图1.题目描述存在一个 无向图 ,图中有 n 个节点。其中每个节点都有一个介于 0 到 n - 1 之间的唯一编号。给你一个二维数组 graph ,其中 graph[u] 是一个节点数组,由节点 u 的邻接节点组成。形式上,对于 graph[u] 中的每个 v ,都存在一条位于节点 u 和节点 v 之间的无向边。该无向图同时具有以下属性:不存在自环(graph[u] 不包含 u)。不存在平行边(graph[u] 不包含重复值)。如果 v 在 graph[u] 内,那原创 2022-03-31 16:54:26 · 292 阅读 · 0 评论 -
力扣:207.课程表——拓扑排序算法
力扣:207.课程表——拓扑排序算法1. 题目描述你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;原创 2022-03-31 14:17:47 · 1311 阅读 · 0 评论 -
算法:二分查找(4种模板)
算法:二分查找(4种模板)1.基本的二分查找(一)条件:[ left,right ] 左闭右闭int binarySearch1(vector<int> nums,int target){ int left = 0; int right = nums.size() - 1;//这个right是可以取到的 while(left <= right){//当left==right,区间[left, right]依然有效,所以用 <= in原创 2022-03-25 23:45:00 · 3060 阅读 · 1 评论 -
力扣:1005.K 次取反后最大化的数组和
力扣:1005.K 次取反后最大化的数组和1、题目介绍给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。重复这个过程恰好k 次。可以多次选择同一个下标i 。以这种方式修改数组后,返回数组 可能的最大和 。示例 1:输入:nums = [4,2,3], k = 1输出:5解释:选择下标 1 ,nums 变为 [4,-2,3] 。示例 2:输入:nums = [3,-1,0,2], k = 3输出原创 2022-03-23 01:00:00 · 254 阅读 · 0 评论 -
力扣:134.加油站
力扣:134.加油站1、题目描述在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组 gas 和 cost ,如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。示例 1:输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]原创 2022-03-22 18:18:12 · 299 阅读 · 0 评论 -
力扣:96.不同的二叉搜索树
力扣:96.不同的二叉搜索树1、题目给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。示例 1:输入:n = 3输出:5示例 2:输入:n = 1输出:1链接:https://leetcode-cn.com/problems/unique-binary-search-trees2、思路分析首先本题采用动态规划解题方法,创建dp数组大小为n+1。dp[i]的定义为有i个节点的二叉搜索树的种数。原创 2022-03-17 16:38:44 · 1014 阅读 · 0 评论 -
力扣:51. N皇后
力扣:51. N皇后n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/n-queens1、思路暴力求解,回溯剪枝。穷举每一种情况,从第1行到第n行,每一行选择一列往下穷举,原创 2022-03-15 15:28:06 · 1088 阅读 · 0 评论 -
力扣:1047.删除字符串中的所有相邻重复项
力扣:1047.删除字符串中的所有相邻重复项思路:这一题与力扣20.有效的括号原理一样。首先将字符串一个个入栈,如果遇到的字符串与栈顶的字符串一样,则弹栈,否则入栈,遍历完即可。代码中注释的部分不知道为啥,通过不了力扣,超时,一个是栈顶元素+res一个是res+栈顶元素 然后反转。代码如下(c++):class Solution {public: string removeDuplicates(string s) { stack<char> stk;原创 2022-03-08 20:41:51 · 210 阅读 · 0 评论 -
力扣:150.逆波兰表达式求值
力扣:150.逆波兰表达式求值逆波兰表达式:逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 ) 。该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * ) 。逆波兰表达式主要有以下两个优点:去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中思路:遍历to原创 2022-03-09 16:33:10 · 386 阅读 · 0 评论 -
力扣:347.前k个高频元素
力扣:347.前k个高频元素给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]链接:https://leetcode-cn.com/problems/top-k-frequent-elements思路:首先用map储存每个元素出现的次数,然后使用优先队列(小顶堆,值小原创 2022-03-10 22:43:50 · 823 阅读 · 0 评论 -
力扣:剑指Offer58-II.左旋转字符串
力扣:剑指Offer58-II.左旋转字符串链接https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/思路1:一次往左移动一位,循环n次,代码如下:class Solution {public: string reverseLeftWords(string s, int n) { for(int i =0;i<n;i++){ int temp = s[0];原创 2022-03-07 17:24:54 · 469 阅读 · 0 评论 -
力扣:20.有效的括号
力扣:20.有效的括号思路:利用栈容器储存括号字符,遍历字符串,如果首先入栈的为右括号则直接return false,否则将其入栈,若在遍历过程中遇到的为右括号且与栈顶的符号匹配,则弹出栈顶元素。(栈内均为左括号),若遇到的右括号与栈顶的左括号不匹配则return false;遍历完后,判断栈的大小,若不为0,则有多余的括号,若为0则return true;代码如下class Solution {public: bool isValid(string s) { stack&l原创 2022-03-08 20:22:17 · 217 阅读 · 0 评论 -
力扣:239.滑动窗口最大值
力扣:239.滑动窗口最大值题目链接给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5原创 2022-03-09 18:34:53 · 202 阅读 · 0 评论 -
力扣:151.翻转字符串里的单词
力扣:151.翻转字符串里的单词链接https://leetcode-cn.com/problems/reverse-words-in-a-string/思路:将源字符串多余空格去掉,根据空格切割单词,用栈储存单词,出栈拼接单词即完成反转。代码如下:class Solution {public: string reverseWords(string s) { stack<string> stk;//定义栈 int m = s.size();原创 2022-03-07 16:58:56 · 234 阅读 · 0 评论 -
力扣:131.分割回文串
力扣:131.分割回文串1、题目描述给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。示例 1:输入:s = “aab”输出:[[“a”,“a”,“b”],[“aa”,“b”]]示例 2:输入:s = “a”输出:[[“a”]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-partitioning2、思路首先原创 2022-03-13 09:27:58 · 7567 阅读 · 0 评论