
刷点题
Komorebi_Liao
被卷死的那个CS学生。
展开
-
leetcode 5 回文子串
很明显暴力方法是n平方复杂度,所以一直在想有没有不是n平方复杂度的方法。最后看了题解发现其实就是n平方复杂度,所以就直接暴力了。附上一份随手暴力代码,遍历对称中心。原创 2022-12-28 01:23:06 · 197 阅读 · 0 评论 -
leetcode 3. 无重复字符的最长子串 优化代码效率
核心内容是使用一个set或者map维护当前窗口出现的字符。查看了一下别人运行速度最快的写法发现优化方法是。标准解法:滑动窗口,可见官方题解。原创 2022-11-10 10:21:13 · 192 阅读 · 0 评论 -
UML 考试题 合集
UML的全称是 ( B )(A)Unify Modeling Language (B)Unified Modeling Language(C)Unified Modem Language (D)Unified Making Language执行者(Actor)与用例之间的关系是( C )(A)包含关系 (B)泛化关系 (C)关联关系 (D)扩展关系在类图中,下面哪个符号表示继承关系( C )在类图中,“ #”表示的可见性是( B )(A)Public (B)Protected (C)Priva原创 2020-10-19 21:09:56 · 11759 阅读 · 1 评论 -
csp201903-4 消息传递接口 C++队列模拟 100份分
#include <bits/stdc++.h>using namespace std;struct Node{ char type; int to; Node(string a) { type = a[0]; int temp=0; for(int i=1;i<a.size()&&isdigit(a[i]);i++) { temp = te...原创 2020-09-13 11:31:35 · 229 阅读 · 0 评论 -
ccf csp 201812-3 CIDR合并 C++ 90分
题目解题思路思路按照官方思路就行了,我主要讲一下实现方式使用结构体,并重载<符号,用set来维护整个ip列表,可以自动排序,并且以 O(logN)的复杂度 快速删除,插入元素。如果使用vector数组,删除插入一个元素的复杂度为 0(N),则总复杂度为O(N方),对于 n为1e5的数据大小肯定超时。第零步:处理输入步骤1:判断是否有/,有的话则后面数字为前缀长度,否则通过前面的前缀判断前缀长度。步骤2:处理前缀,用一个int 数组 int staIp[4]; 存前缀。(这样利于结果输出)原创 2020-09-10 15:18:24 · 239 阅读 · 0 评论 -
leetcode60.第K个排序 C++ 数学方法
题目给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。说明:给定 n 的范围是 [1, 9]。 给定 k 的范围是[1, n!]。示例 1:输入: n = 3, k = 3输出: “213”示例 2:输入: n = 4, k = 9输出: “2314”解题思路数学方法原创 2020-09-08 11:43:00 · 430 阅读 · 0 评论 -
leetcode347.前k个高频元素 C++ map统计+set排序
题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2]示例 2:输入: nums = [1], k = 1 输出: [1]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意顺序返回答案。原创 2020-09-08 11:28:20 · 255 阅读 · 0 评论 -
leetcode486.预测赢家 C++动态规划
题目给定一个表示分数的非负整数数组。 玩家 1 从数组任意一端拿取一个分数,随后玩家 2 继续从剩余数组任意一端拿取分数,然后玩家 1 拿,……。每次一个玩家只能拿取一个分数,分数被拿取之后不再可取。直到没有剩余分数可取时游戏结束。最终获得分数总和最多的玩家获胜。给定一个表示分数的数组,预测玩家1是否会成为赢家。你可以假设每个玩家的玩法都会使他的分数最大化。示例 1:输入:[1, 5, 2]输出:False解释:一开始,玩家1可以从1和2中进行选择。 如果他选择 2(或者 1 ),那么玩家原创 2020-09-08 11:14:32 · 405 阅读 · 0 评论 -
leetcode77.组合 C++ dfs+剪枝优化 不用去重
题目给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]解题思路因为是求组合,所以按从小到大的数字顺序选择即可。注意递归过程可优化,优化条件是使得顺序选下去最后一个数字不会超过n为了没有重复结果,在combine函数(dfs的桩函数)中直接枚举temp的第一个数字,保证第一个数不同即可保证结果不同,省去了原创 2020-09-08 10:36:36 · 245 阅读 · 0 评论 -
csp201909-4推荐系统 C++ 使用set + unordered_map
题目解题思路题目很简单,模拟一个商品存储就行了,重载结构体的<符号,就可以使用STL中的set进行自动排序。但是直接这样写只能得10分,显示超时。从数据量大小来看,查询语句有1e5个,其中ask只有100个,所以主要得操作还是增和删。set的增是O(logn),应该没问题,现在问题是删除时候,需要先遍历整个set找到需要删除的元素,这样的话复杂度就是O(n)了,这样的话如果有1e5个删除操作,所有商品数量级1e5时候,复杂度就是1e10级别了,肯定是超时的,所有必须把删除操作的复杂度降原创 2020-09-04 19:15:24 · 350 阅读 · 0 评论 -
leetcode每日一题 剑指Offer20.表示数值的字符串 C++ if else强行判断
题目请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。解题思路没看题解的自动机解法,直接一个WA一个WA爬出来的。题目说的规则完全不清楚,很多规则都是交了之后看样例的出来的总结了几个可能想不到的点:1.字符串存在首尾空白需要去掉(首尾空白不影响正确性);比如“ 3.12 ” 是对的。原创 2020-09-03 20:53:57 · 206 阅读 · 0 评论 -
leetcode31.下一个排列 题目解释及解法分析 C++
题目实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1题面解释这道题题面比较难懂,有种直接拿英文题目谷歌翻译过来的感觉。我用我的理解说一下题目意思:首先排列的意思:其实就是给定数组里所有元素的全排列然后这个题原创 2020-08-28 20:47:25 · 257 阅读 · 0 评论 -
leetcode23.合并k个有序链表 c++ 优先队列
题目给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 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示例 2:输入:lists =原创 2020-08-28 16:59:26 · 403 阅读 · 0 评论 -
leetcode22.括号生成 C++ dfs 剪枝 运行时间0ms
题目数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]解题思路搞清楚什么时候递归什么时候不递归即可,即加了剪枝当“(”数量小于n时,可dfs一个“(”;当“)”数量小于“(”数量时,可dfs一个“)”;当若是最后一个,则加上“)”,返回一个结果(最后一个必定是“)”)。初始是“(”,因为第一个一定是“(”。原创 2020-08-27 11:33:57 · 195 阅读 · 0 评论 -
leetcode22.括号生成 非dfs方法 有点类似dp算法 每次插入一对“()”
题目数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]解题思路比较不一样。。没用dfs等经典解法。我的思路是:n = 1 的时候,结果为“()”那么怎么保证括号合法性呢?索性,我每次直接插入一对“()”,那这样不肯定是合法的吗。所以,n=2时候,在“()”中插入一对“()”,得到了 “(())”和“()()”原创 2020-08-26 20:47:29 · 235 阅读 · 0 评论 -
leetcode19.删除链表倒数第N个节点 快慢指针
题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?可以两遍扫描,第一遍求出长度。代码略,运行时间8ms。使用快慢指针实现一遍扫描,运行时间4ms。解题思路快慢指针两指针初值都是head快指针先走n个然后两个一起走原创 2020-08-25 20:34:52 · 288 阅读 · 0 评论 -
leetcode14.最长公共前缀 C++ 先排序 复杂度 nlog(n)
题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。解题思路此题目是个简单题,所以可以暴力求解,复杂度n方题目简单,写博客为了记录下面这种找公共前缀的简化方法。先对所有字符串按字典序排序,然后找最大原创 2020-08-25 19:56:14 · 233 阅读 · 0 评论 -
leetcode491.递增子序列 枚举+剪枝同官方第二种解法
题目给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。示例:输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7],[6, 7, 7], [7,7], [4,7,7]]说明:给定数组的长度不会超过15。 数组中的整数范围是 [-100,100]。 给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。解题思路看官方解答即可,这里直接截图过来。本人代码(原创 2020-08-25 19:09:45 · 223 阅读 · 0 评论 -
leetcode10.正则表达式匹配 不调库函数 原理性解法 C++ 有限状态机 模拟编译原理词法分析
直接模拟有限状态机写的,能过,但是效率不高,纯属为了写原理。前置知识:有限状态机,《编译原理》词法分析一章中正规式转NFA方法。题目:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输原创 2020-08-25 00:32:50 · 261 阅读 · 0 评论 -
leetcode17.电话号码 经典回溯 C++ 运行时间0ms,打败100%。
题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23” 输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]. 说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。解题思路这道题数据量不算大,不然使用递归肯定是超时的,这个题目就是经典回溯解法。因为字母是按顺序的,所以可以不用写数字-字母对照表,直原创 2020-08-24 21:28:11 · 537 阅读 · 1 评论 -
c++ vector<char> 转string 亲测有用
直接上代码: vector<char> res; string ret; for(int i=0;i<res.size();i++) { ret += res[i]; } ret+='\0'; cout<<ret<<endl;原创 2020-08-16 20:51:35 · 3170 阅读 · 0 评论 -
leetcode 3.无重复字符的最长子串 滑动窗口法 C++
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。解题原创 2020-08-15 17:07:28 · 233 阅读 · 0 评论