算法
网安幕后推手
这个作者很懒,什么都没留下…
展开
-
lettcode122卖股票的最佳时机
题目描述给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。返回 你能获得的 最大 利润 。例子:输入:prices = [7,1,5,3,6,4]输出:7解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。 随后,在第 4 天(股票原创 2022-04-27 19:16:02 · 282 阅读 · 0 评论 -
leetcode15三数之和
题目:自己的做法:通过率130 / 318class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { if (nums.empty() || nums.size() < 3) return vector<vector<int>>(); int num_0 = 0; vector<vector<int>>原创 2022-04-19 15:57:41 · 193 阅读 · 0 评论 -
leetcode-字符串解码
问题描述给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入示例s = "3[a]2[bc]", 返回 "aaabcbc".s = "3[a2[c]]"原创 2020-05-28 07:13:26 · 320 阅读 · 0 评论 -
leetcode-前缀和(整除类型题目)
问题给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续、非空)子数组的数目。示例输入:A = [4,5,0,-2,-3,1], K = 5输出:7解释:有 7 个子数组满足其元素之和可被 K = 5 整除:[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]代码class Solution {public: int subarraysDivByK(vector<原创 2020-05-27 09:01:23 · 233 阅读 · 0 评论 -
leetcode-前序后序得到二叉树
问题根据一棵树的前序遍历与中序遍历构造二叉树。示例例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7代码(c++)class Solution {public: TreeNode* buildTree(vector<int>& preorder, vector<int>&原创 2020-05-22 09:08:16 · 157 阅读 · 0 评论 -
leetcode-最长回文子串
问题描述示例思路也是看了大佬的解答,因为回文是从前往后读以及从后往前读都是一样的所以采用寻找最长公共子串的方法(注意不是经常使用动态规划寻找的最长公共子序列),公共子串同样采用动态规划的思想,寻找最长公共子串。但是寻找结果有问题,比如说aac345caa,如果采用以上做法结果就是aac,显然是不正确的,所以我们要确保寻找到的子串在未倒置之前的最后一个值和当前遍历的源字符串的值相等,也就是说要确保找到的子串在倒置回去以后和现在遍历的源字符串是可以吻合的如果还是觉得博主说的很模糊的话可以参考:参考解答原创 2020-05-21 09:39:47 · 76 阅读 · 0 评论 -
lettcode-每个元音包含偶数次的最长子字符串
问题给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 ‘a’,‘e’,‘i’,‘o’,‘u’ ,在子字符串中都恰好出现了偶数次。示例输入:s = "eleetminicoworoep"输出:13解释:最长子字符串是 "leetminicowor" ,它包含 e,i,o 各 2 个,以及 0 个 a,u 。代码class Solution {public: int findTheLongestSubstring(string s) {原创 2020-05-20 09:45:58 · 223 阅读 · 0 评论 -
lettcode-课程表
问题描述现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。示例输入: 2, [[1,0]] 输出: [0,1]解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为 [0,1] 。输入: 4, [[1,0],[2,0],[3,1],[3,2]]输出: [0,原创 2020-05-17 08:20:00 · 113 阅读 · 0 评论 -
lettcode-和为K的子数组
问题给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。思路(今天也是崇拜官方的一天)刚开始的思路是窗口,具体就是设定一个窗口,然后如果这个窗口内的数据大于k,那么就让窗口前面抛弃一个值,否则窗口扩充,但是后来当k=0的时候死活过不去,所以放弃!官方的解答和微妙,就是正常人的思路,如果我想知道当前值之前有没有存在和为k的子数组,那么就用当前值减去k得原创 2020-05-15 08:12:18 · 94 阅读 · 0 评论 -
lettcode-去除重复字母
问题给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例示例 1:输入: "bcabc"输出: "abc"示例 2:输入: "cbacdcbc"输出: "acdb"思路整体的思路是贪心。贪心的结果就是每一步都要保证当前字符串的字典序最小。考虑两点:(1)遍历位置i时的当前值小于栈中前面的值,而且前面的值在原字符串中大于i的位置还存在值,那么就应当将前面的值删除,相当于选择了后者放弃了原创 2020-05-12 10:14:13 · 462 阅读 · 0 评论 -
lettcode-模拟行走机器人
问题描述机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令:-2:向左转 90 度-1:向右转 90 度1 <= x <= 9:向前移动 x 个单位长度在网格上有一些格子被视为障碍物。第 i 个障碍物位于网格点 (obstacles[i][0], obstacles[i][1])机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续该路线的其余部分。返回从原点到机器人的最大欧式距离的平方。示例原创 2020-05-11 10:11:12 · 167 阅读 · 0 评论 -
lettcode-pow(x,y)实现
问题描述实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例输入: 2.00000, 10输出: 1024.00000输入: 2.10000, 3输出: 9.26100输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25代码(c++)class Solution {public: double myPow(double x, int n) { long long nd=n;原创 2020-05-11 08:25:31 · 122 阅读 · 0 评论 -
lettcode-Z字形变换
问题描述将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例输入: s = "LE原创 2020-05-10 09:03:15 · 85 阅读 · 0 评论 -
lettcode-找到数组中所有消失的数字
问题描述给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例输入:[4,3,2,7,8,2,3,1]输出:[5,6]思路(官题解)在这里深深的向官方鞠一躬,向大佬膜拜官方的不用额外空间是这样解决的:在原数组修改主要思路就是在原数组中遍历到原创 2020-05-09 09:07:51 · 134 阅读 · 0 评论 -
lettcode-另一个树的子树(不简单的简单题)
问题描述示例思路1、暴力暴力解法就是针对原树中的每一个结点和其子树与标定的子树作对比,利用递归相当于回溯的概念2、匹配过程中加入KMP在匹配过程中,B数是A树的子串的话,说明符合条件。但是针对本题来说,可能会出现以下情况:A根为1,左结点为2,右节点为NULL,B根为1,左结点为NULL,右节点为2,此时两者的先序遍历就是相同的,所以需要在原树中插入左空结点或者右空节点标识(1)将...原创 2020-05-07 07:31:09 · 116 阅读 · 0 评论 -
lettcode-最低票价
问题在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。火车票有三种不同的销售方式:一张为期一天的通行证售价为 costs[0] 美元;一张为期七天的通行证售价为 costs[1] 美元;一张为期三十天的通行证售价为 costs[2] 美元。通行证允许数天无限制的旅行。...原创 2020-05-06 09:15:35 · 99 阅读 · 0 评论 -
lettcode-验证二叉树
问题描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。实例代码(c++)方法一思想是纯递归,先通过递归遍历到最后的叶子结点,然后从叶子结点向上返回当前最大值和最小值,得到返回值的结点判断是否大于左子树中的最大值,小于右子树中的最...原创 2020-05-05 10:17:39 · 137 阅读 · 0 评论 -
lettcode-跳跃游戏
问题描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。代码(c++)方法一(超时):动...原创 2020-05-05 10:18:31 · 98 阅读 · 0 评论 -
lettcode-从先序遍历还原二叉树
问题描述我们从二叉树的根节点 root 开始进行深度优先搜索。在遍历中的每个节点处,我们输出 D 条短划线(其中 D 是该节点的深度),然后输出该节点的值。(如果节点的深度为 D,则其直接子节点的深度为 D + 1。根节点的深度为 0)。如果节点只有一个子节点,那么保证该子节点为左子节点。给出遍历输出 S,还原树并返回其根节点 root。案例输入:"1-2--3--4-5--6--7...原创 2020-04-30 10:07:22 · 158 阅读 · 0 评论 -
lettcode-可获得的最大点数
问题描述几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。示例输入:cardPoints = [1,2,3,4,5,6,1], k = 3输出:...原创 2020-04-26 14:05:53 · 125 阅读 · 0 评论 -
lettcode-数组中的逆序对
问题描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例输入: [7,5,6,4]输出: 5代码(c++)class Solution {public: int reversePairs(vector<int>& nums) { vector<int&g...原创 2020-04-24 12:36:37 · 77 阅读 · 0 评论 -
蓝桥杯-整数划分
问题描述将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。 例如:n=7,k=3,下面三种分法被认为是相同的。 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法。示例7 3输出:4代码(java)import java.util.Scanner;public class Main { public static void main(S...原创 2020-04-22 16:25:08 · 833 阅读 · 0 评论 -
lettcode-统计重复个数
题目描述由 n 个连接的字符串 s 组成字符串 S,记作 S = [s,n]。例如,[“abc”,3]=“abcabcabc”。如果我们可以从 s2 中删除某些字符使其变为 s1,则称字符串 s1 可以从字符串 s2 获得。例如,根据定义,“abc” 可以从 “abdbec” 获得,但不能从 “acbbe” 获得。现在给你两个非空字符串 s1 和 s2(每个最多 100 个字符长)和两个整数...原创 2020-04-19 10:08:06 · 95 阅读 · 0 评论 -
lettcode-跳跃游戏
问题描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。案例示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无...原创 2020-04-17 09:15:46 · 117 阅读 · 0 评论 -
lettcode-合并区间
问题描述给出一个区间的集合,请合并所有重叠的区间示例示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间...原创 2020-04-16 09:02:45 · 89 阅读 · 0 评论 -
蓝桥杯-乘积最大
题目描述今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。同时,为了帮助选手...原创 2020-04-12 15:53:02 · 985 阅读 · 0 评论 -
lettcode-朋友圈
问题描述班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数...原创 2020-04-08 22:01:50 · 146 阅读 · 0 评论 -
lettcode-LFU缓存
题目描述请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。它应该支持以下操作:get 和 put。get(key) - 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1。put(key, value) - 如果键不存在,请设置或插入值。当缓存达到其容量时,则应该在插入新项之前,使最不经常使用的项无效。在此问题中,当存在平局(即两个或更多个键具有相同使用频率)时,应该去除 ...原创 2020-04-05 21:08:30 · 89 阅读 · 0 评论 -
蓝桥杯-vip试题-幂方分解
问题描述任何一个正整数都可以用2的幂次方表示。例如: 137=27+23+20 同时约定方次用括号来表示,即ab 可表示为a(b)。 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步:7= 22+2+20 (21用2表示) 3=2+20 所以最后137可表示为: 2(2(2)+2+2(0))+2(2+2(0))+2(0) 又如: 1315=...原创 2020-03-29 18:47:19 · 222 阅读 · 0 评论 -
lettcode-
问题描述请你实现一个类 UndergroundSystem ,它支持以下 3 种方法:checkIn(int id, string stationName, int t)编号为 id 的乘客在 t 时刻进入地铁站 stationName 。一个乘客在同一时间只能在一个地铁站进入或者离开。checkOut(int id, string stationName, int t)编号为...转载 2020-03-29 15:13:03 · 272 阅读 · 1 评论 -
lettcode-被围绕的区域
题目描述给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例输入:X X X XX O O XX X O XX O X X输出:X X X XX X X XX X X XX O X X注意点被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任...原创 2020-03-28 21:41:39 · 119 阅读 · 0 评论 -
蓝桥杯-最短路
问题描述给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环)。请你计算从1号点到其他点的最短路(顶点从1到n编号)。输入格式第一行两个整数n, m。接下来的m行,每行有三个整数u, v, l,表示u到v有一条长度为l的边。输出格式共n-1行,第i行表示1号点到i+1号点的最短路。解题代码(java)相关解题思路见代码注释import java.util.Arr...原创 2020-03-24 11:36:00 · 307 阅读 · 0 评论