算法设计
Chevy_cxw
眼前越黑暗,星辰的光芒就会越耀眼。
展开
-
leetcode1036. 逃离大迷宫
题目链接:1036. 逃离大迷宫题意:在一个 106x 106的网格中,每个网格上方格的坐标为(x, y)。现在从源方格source = [sx, sy]开始出发,意图赶往目标方格target = [tx, ty]。数组blocked是封锁的方格列表,其中每个blocked[i] = [xi, yi]表示坐标为(xi, yi)的方格是禁止通行的。每次移动,都可以走到网格中在四个方向上相邻的方格,只要该方格不在给出的封锁列表blocked上。同...原创 2022-01-11 14:46:27 · 434 阅读 · 0 评论 -
leetcode 剑指offer1-20
文章目录[剑指 Offer 03. 数组中重复的数字](https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/)哈希表原地交换[剑指 Offer 04. 二维数组中的查找](https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/)模拟[剑指 Offer 05. 替换空格](https://leetcode-cn.com/problems/原创 2021-10-16 21:44:21 · 587 阅读 · 0 评论 -
leetcode剑指 Offer 59 - I. 滑动窗口的最大值
题目链接:题意:方法:class Solution {public: int longestCommonSubsequence(string text1, string text2) { int size1 = text1.size();//记录文本1的长度 int size2 = text2.size();//记录文本2的长度 vector<vector<int>> dp(size1+1,ve...原创 2021-09-27 16:58:11 · 102 阅读 · 0 评论 -
leetcode1255. 得分最高的单词集合
题目链接:力扣https://leetcode-cn.com/problems/maximum-score-words-formed-by-letters/题意:你将会得到一份单词表words,一个字母表letters(可能会有重复字母),以及每个字母对应的得分情况表score。请你帮忙计算玩家在单词拼写游戏中所能获得的「最高得分」:能够由letters里的字母拼写出的任意属于 words单词子集中,分数最高的单词集合的得分。单词拼写游戏的规则概述如下:玩家...原创 2021-09-20 16:55:05 · 160 阅读 · 0 评论 -
leetcode354. 俄罗斯套娃信封问题
题目链接:力扣https://leetcode-cn.com/problems/russian-doll-envelopes/题意:给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算 最多能有多少个 信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。注意:不允许旋转信封。...原创 2021-09-20 11:34:26 · 95 阅读 · 0 评论 -
leetcode93. 复原 IP 地址
题目链接:题意:方法:class Solution {public: int longestCommonSubsequence(string text1, string text2) { int size1 = text1.size();//记录文本1的长度 int size2 = text2.size();//记录文本2的长度 vector<vector<int>> dp(size1+1,vec...原创 2021-09-20 09:35:35 · 86 阅读 · 0 评论 -
leetcode650. 只有两个键的键盘
题目链接:力扣https://leetcode-cn.com/problems/2-keys-keyboard/题意:最初记事本上只有一个字符 'A' 。你每次可以对这个记事本进行两种操作:Copy All(复制全部):复制这个记事本中的所有字符(不允许仅复制部分字符)。Paste(粘贴):粘贴 上一次 复制的字符。给你一个数字n ,你需要使用最少的操作次数,在记事本上输出 恰好n个 'A' 。返回能够打印出n个 'A' 的最少操作次数。方法: 动态规划c...原创 2021-09-20 09:24:31 · 71 阅读 · 0 评论 -
leetcode131. 分割回文串
题目链接:力扣https://leetcode-cn.com/problems/palindrome-partitioning/题意:给你一个字符串s,请你将s分割成一些子串,使每个子串都是回文串。返回s所有可能的分割方案。回文串是正着读和反着读都一样的字符串。方法: 回溯法class Solution {private: vector<vector<string>> res;//返回结果 vector<s...原创 2021-09-20 09:20:32 · 88 阅读 · 0 评论 -
leetcode40. 组合总和 II
题目链接:力扣题意:给定一个数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使用一次。注意:解集不能包含重复的组合。方法: 回溯class Solution {private: vector<vector<int>> res; vector<int> vct; vector...原创 2021-09-18 16:46:41 · 99 阅读 · 0 评论 -
leetcode216. 组合总和 III
题目链接:力扣题意:找出所有相加之和为n 的k个数的组合。组合中只允许含有 1 -9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。方法: 回溯枚举class Solution {private: int k,n;//将k和n由局部变为全局 vector<vector<int>> res;//结果向量 vector<int> vct;//暂存向量...原创 2021-09-18 11:13:19 · 98 阅读 · 0 评论 -
leetcode77. 组合
题目链接:力扣https://leetcode-cn.com/problems/combinations/题意:给定两个整数n和k,返回范围[1, n]中所有可能的k个数的组合。你可以按任何顺序返回答案。方法: 递归嵌套class Solution {private: vector<vector<int>> res; int k,n; void find(int index,int loc,vector...原创 2021-09-18 10:40:06 · 70 阅读 · 0 评论 -
leetcode600. 不含连续1的非负整数
题目链接:力扣https://leetcode-cn.com/problems/non-negative-integers-without-consecutive-ones/题意:给定一个正整数 n,找出小于或等于 n 的非负整数中,其二进制表示不包含连续的1的个数。方法: 动态规划,利用位运算,dp[i]表示第i位是1其余位全是0的情况下,不包含连续1的个数,每次通过位运算枚举当前最高位k的数是否为1,假如是的话就加上dp[k]的情况数目,然后判断一下前一位是否是1,假如是的话,...原创 2021-09-15 17:53:38 · 116 阅读 · 0 评论 -
leetcode664. 奇怪的打印机
题目链接:力扣题意:有台奇怪的打印机有以下两个特殊要求:打印机每次只能打印由 同一个字符 组成的序列。每次可以在任意起始和结束位置打印新字符,并且会覆盖掉原来已有的字符。给你一个字符串 s ,你的任务是计算这个打印机打印它需要的最少打印次数。方法: 动态规划,dp[i][j]表示i到j最少的打印次数,i从后往前枚举,j从前往后枚举,每一次判断一下第i个字符和第j个字符是否相同,如果相同dp[i][j]就等于dp[i][j-1],如果不同,我们就把i,j这一段划分为两段i,k...原创 2021-09-14 18:50:42 · 342 阅读 · 0 评论 -
leetcode524. 通过删除字母匹配到字典里最长单词
题目链接:力扣https://leetcode-cn.com/problems/longest-word-in-dictionary-through-deleting/题意:给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。方法一:排序+双指针class Solution {private:...原创 2021-09-14 09:53:18 · 74 阅读 · 0 评论 -
leetcode312. 戳气球
题目链接:力扣https://leetcode-cn.com/problems/burst-balloons/题意:有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组nums中。现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。这里的 i - 1 和 i + 1 代表和i相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一...原创 2021-09-13 20:41:30 · 75 阅读 · 0 评论 -
leetcode1402. 做菜顺序
题目链接:力扣https://leetcode-cn.com/problems/reducing-dishes/题意:一个厨师收集了他n道菜的满意程度satisfaction,这个厨师做出每道菜的时间都是 1 单位时间。一道菜的 「喜爱时间」系数定义为烹饪这道菜以及之前每道菜所花费的时间乘以这道菜的满意程度,也就是time[i]*satisfaction[i]。请你返回做完所有菜 「喜爱时间」总和的最大值为多少。你可以按任意顺序安排做菜的顺序,你也可以选择放弃做...原创 2021-09-13 16:08:25 · 101 阅读 · 0 评论 -
leetcode32. 最长有效括号
题目链接:题意:方法:class Solution {public: int longestCommonSubsequence(string text1, string text2) { int size1 = text1.size();//记录文本1的长度 int size2 = text2.size();//记录文本2的长度 vector<vector<int>> dp(size1+1,vect...原创 2021-09-12 13:40:26 · 55 阅读 · 0 评论 -
leetcode239. 滑动窗口最大值
题目链接:力扣https://leetcode-cn.com/problems/sliding-window-maximum/题意:给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。方法: 模拟,利用数据结构mutiset,可包含重复元素,mutiset底层实现是红黑树class Solution {public: vector&l...原创 2021-09-10 17:40:51 · 55 阅读 · 0 评论 -
leetcodeLCP 28. 采购方案
题目链接:https://leetcode-cn.com/problems/4xy4Wx/题意:小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1方法一: 动态规划,枚举以i开头有几种方案class Solution {public: int p...原创 2021-09-07 16:29:22 · 123 阅读 · 0 评论 -
leetcode剑指 Offer 46. 把数字翻译成字符串
题目链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/题意:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。方法: 动态规划class Solution {public: int tra...原创 2021-09-07 10:17:35 · 101 阅读 · 0 评论 -
leetcode1221. 分割平衡字符串
题目链接:https://leetcode-cn.com/problems/split-a-string-in-balanced-strings/题意:在一个 平衡字符串 中,'L' 和 'R' 字符的数量是相同的。给你一个平衡字符串s,请你将它分割成尽可能多的平衡字符串。注意:分割得到的每个字符串都必须是平衡字符串。返回可以通过分割得到的平衡字符串的 最大数量 。方法: 简单判断class Solution {public: int balanced...原创 2021-09-07 08:48:56 · 58 阅读 · 0 评论 -
leetcode剑指 Offer 30. 包含min函数的栈
题目链接:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/题意:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。方法:将min()函数复杂度降为O(1)O(1)。可借助辅助栈实现class MinStack {private: stack<int> st,st_min;...原创 2021-09-06 14:59:32 · 58 阅读 · 0 评论 -
leetcode剑指 Offer 24. 反转链表
题目链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/题意:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。方法一:迭代双指针/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(...原创 2021-09-06 14:40:54 · 137 阅读 · 0 评论 -
leetcode剑指 Offer 20. 表示数值的字符串
题目链接:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/题意:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分:若干空格一个小数或者整数(可选)一个'e'或'E',后面跟着一个整数若干空格小数(按顺序)可以分成以下几个部分:(可选)一个符号字符('+' 或 '-')下述格式之一:至少一位数字,后面跟着一个点 '.'...原创 2021-09-04 21:52:33 · 73 阅读 · 0 评论 -
leetcode剑指 Offer 06. 从尾到头打印链表
题目链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/题意:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。方法一:利用向量按头到尾存储链表中的每个值,然后将向量反转返回/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *...原创 2021-09-04 20:26:47 · 57 阅读 · 0 评论 -
leetcode剑指 Offer 05. 替换空格
题目链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof题意:请实现一个函数,把字符串s中的每个空格替换成"%20"。方法一: 遍历替换class Solution {public: string replaceSpace(string s) { string str,str1="%20";//定义要返回的字符串,要替换的字符串 for(int i=0;i<s.size...原创 2021-09-04 20:07:38 · 61 阅读 · 0 评论 -
leetcode剑指 Offer 10- I. 斐波那契数列
题目链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/题意:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项(即F(N))。斐波那契数列的定义如下:F(0) = 0,F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007...原创 2021-09-04 19:36:20 · 52 阅读 · 0 评论 -
leetcode剑指 Offer 09. 用两个栈实现队列
题目链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/题意:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )方法: 利用两个栈,一个栈模拟入队列,另一个栈模拟出队列class CQueue {priv...原创 2021-09-03 09:50:08 · 64 阅读 · 0 评论 -
leetcode面试题 17.14. 最小K个数
题目链接:题意:方法:class Solution {public: int longestCommonSubsequence(string text1, string text2) { int size1 = text1.size();//记录文本1的长度 int size2 = text2.size();//记录文本2的长度 vector<vector<int>> dp(size1+1,vecto..原创 2021-09-03 09:28:31 · 150 阅读 · 0 评论 -
leetcode279. 完全平方数
题目链接:https://leetcode-cn.com/problems/perfect-squares/题意:给定正整数n,找到若干个完全平方数(比如1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。方法: 枚举每...原创 2021-09-02 16:16:50 · 62 阅读 · 0 评论 -
leetcode343. 整数拆分
题目链接:https://leetcode-cn.com/problems/integer-break/题意:给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。方法: 动态规划,嵌套双重循环,先枚举大整数,然后枚举没有给构成大整数的整数class Solution {public: int integerBreak(int n) { // 动态规划,存储整数为i时,最大的乘积 vecto...原创 2021-09-02 16:02:48 · 92 阅读 · 0 评论 -
leetcode377. 组合总和 Ⅳ
题目链接:https://leetcode-cn.com/problems/combination-sum-iv/题意:给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目数据保证答案符合 32 位整数范围。方法: 利用动态规划数组,存储从0到目标整数的所有整数,叠加方案数目class Solution {public: int combinationSum4(ve..原创 2021-09-02 15:15:29 · 104 阅读 · 0 评论 -
leetcode322. 零钱兑换
题目链接:https://leetcode-cn.com/problems/coin-change/题意:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回-1 。你可以认为每种硬币的数量是无限的。方法:动态规划,存储每种金额下的最少硬币个数。class Solution {public: int coinChange(v...原创 2021-09-01 10:09:18 · 60 阅读 · 0 评论 -
leetcode376. 摆动序列
题目链接:https://leetcode-cn.com/problems/wiggle-subsequence/题意:如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。例如,[1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3)是正负交替出现的。相反,[1, 4, 7, 2, 5]和[1, 7, 4, 5, 5...原创 2021-08-30 15:51:39 · 67 阅读 · 0 评论 -
leetcode295. 数据流的中位数
题目链接:https://leetcode-cn.com/problems/find-median-from-data-stream/题意:中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4]的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回...原创 2021-08-27 10:10:55 · 72 阅读 · 0 评论 -
leetcode1289. 下降路径最小和 II
题目链接:https://leetcode-cn.com/problems/minimum-falling-path-sum-ii/题意:给你一个整数方阵arr,定义「非零偏移下降路径」为:从arr 数组中的每一行选择一个数字,且按顺序选出来的数字中,相邻数字不在原数组的同一列。请你返回非零偏移下降路径数字和的最小值。方法一:动态规划,选取前i-1行的最小dp值,并且这个dp值不能和第i行的数在同一列上class Solution {private: cons...原创 2021-08-26 20:28:01 · 105 阅读 · 0 评论 -
leetcode42. 接雨水
题目链接:https://leetcode-cn.com/problems/trapping-rain-water/题意:给定n个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。方法:动态规划,根据从左侧开始覆盖的最大面积和从右侧覆盖的最大面积,这两者之间的交集,求出最后接完雨水的面积,最后减去柱子高度,就是雨水体积。class Solution {public: int trap(vector<int>& h...原创 2021-08-25 23:57:11 · 79 阅读 · 0 评论 -
leetcode96. 不同的二叉搜索树
题目链接:https://leetcode-cn.com/problems/unique-binary-search-trees/题意:给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。方法:动态规划,存储状态class Solution {public: int numTrees(int n) { vector<int> dp(n+1,0);//动态规划数组,...原创 2021-08-25 23:04:59 · 80 阅读 · 0 评论 -
leetcode118. 杨辉三角
题目链接:https://leetcode-cn.com/problems/pascals-triangle/题意:给定一个非负整数numRows,生成「杨辉三角」的前numRows行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。方法:动态规划class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector&...原创 2021-08-25 15:32:21 · 66 阅读 · 0 评论 -
leetcode91. 解码方法
题目链接:https://leetcode-cn.com/problems/decode-ways/题意:一条包含字母A-Z 的消息通过以下映射进行了 编码 :'A' -> 1'B' -> 2...'Z' -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" 可以映射为:"AAJF" ,将消息分组为 (1 1 10 6)"KJF" ,将消息分组为 (11 10 6)注意,消息不能分组为(...原创 2021-08-25 11:51:24 · 61 阅读 · 0 评论