leetcode每日一练
文章平均质量分 52
欧业
个人水平有限,资质平平。但惟愿当一名优秀的程序员。做一些笔记记录自己的成长历程
展开
-
旋转字符串
题目给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。s 的 旋转操作 就是将 s 最左边的字符移动到最右边。例如, 若 s = ‘abcde’,在旋转一次之后结果就是’bcdea’ 。题解这道题本身不是很难,但是从不同的解法中可以收获不少知识方法一这里我采取的是 用s[0]作为标准点,在goal字符串从后到前遍历找出相同的字符的位置pos, 这里就可以用pos将字符串分成两半了,判断 s的前半段是否等于 goal的后半段, s的后半段原创 2022-04-07 18:54:41 · 1240 阅读 · 2 评论 -
二进制表示中质数个计算置位
题目给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数。计算置位位数 就是二进制表示中 1 的个数。例如, 21 的二进制表示 10101 有 3 个计算置位原题链接题目分析这道题本身就不难,不过还是能学到不少东西的统计二进制中 1的个数直接将十进制转为二进制这里直接统计就行int count(int num){ int n =0; while(num){原创 2022-04-07 11:38:05 · 177 阅读 · 0 评论 -
找到处理最多请求的服务器
原题你有 k 个服务器,编号为 0 到 k-1 ,它们可以同时处理多个请求组。每个服务器有无穷的计算能力但是 不能同时处理超过一个请求 。请求分配到服务器的规则如下:第 i (序号从 0 开始)个请求到达。如果所有服务器都已被占据,那么该请求被舍弃(完全不处理)。如果第 (i % k) 个服务器空闲,那么对应服务器会处理该请求。否则,将请求安排给下一个空闲的服务器(服务器构成一个环,必要的话可能从第 0 个服务器开始继续找下一个空闲的服务器)。比方说,如果第 i 个服务器在忙,那么会查看第 (i+原创 2022-04-06 23:28:50 · 407 阅读 · 0 评论 -
寻找比目标字母大的最小字母
题目给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。在比较时,字母是依序循环出现的。举个例子:如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’原题链接题解这道题本质上是一个搜索类的题目,最常用的无非就是线性搜索, 如果题目给的数组是已经排好序的,用二分搜索即可线性搜索class Solution {public:原创 2022-04-03 20:20:41 · 577 阅读 · 0 评论 -
leetcode 考试的最大困扰度
题目一位老师正在出一场由 n 道判断题构成的考试,每道题的答案为 true (用 ‘T’ 表示)或者 false (用 ‘F’ 表示)。老师想增加学生对自己做出答案的不确定性,方法是 最大化 有 连续相同 结果的题数。(也就是连续出现 true 或者连续出现 false)。给你一个字符串 answerKey ,其中 answerKey[i] 是第 i 个问题的正确结果。除此以外,还给你一个整数 k ,表示你能进行以下操作的最多次数:每次操作中,将问题的正确答案改为 ‘T’ 或者 ‘F’ (也就是将 a原创 2022-04-03 09:51:25 · 1235 阅读 · 0 评论 -
交替位二进制数
原题给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。传送链接思路我一开始的思路便是将这个正整数转化为二进制,不断除以2.判断余数(即为二进制中的一个bit, 是否和之前一样,思路比较直接class Solution {public: bool hasAlternatingBits(int n) { int r = -1; while(n){ int a = n % 2;原创 2022-04-02 17:32:28 · 539 阅读 · 0 评论 -
阶乘后的零
原题阶乘后的零题解这道题其实考察的是数学, 后面有多少个0,也就是多少个10,而我们知道10的公因数为2,5.所以我们只需要计算阶乘中的数2和5的因子就足够了。取他们的最小值class Solution {public: int contain(int n,int fac){ int num = 0; while(true){ if(n<fac) break; if(n%fac != 0) break;原创 2022-03-25 10:50:54 · 364 阅读 · 0 评论 -
字典序的第K小数字
引言这道题的难度级别为困难,主要考察的方向是字典树的应用,为leetcode的440题原题字典序的第k小数字思路本人思路我直接用的是构建字典树的方法,这里比较耗时,导致程序超时。这里对数字的处理是转换为字符串。关键记录着每个节点的数量,从而定位叶节点的位置。知道它的指针后,通过迭代找到它的parent,一直到root.从而找到数值class Solution {private: struct TreeNode{ char index; int num原创 2022-03-23 22:04:38 · 448 阅读 · 0 评论 -
如果相邻两个颜色均相同则删除当前颜色
原题如果相邻两个颜色均相同则删除当前颜色解法我们发现能删除的只有‘AAA和 ‘BBB’ 子串,于是我的第一想法是用一个while无限循环,按照比赛制度, 先判断Alice,再判断Bob,怎么判断,可以用string的find函数判断‘AAA或者’BBB’在不在这个字符串内,不在的话直接return结果,在的话用erase函数按照比赛规则将‘A或者’B’删除。代码如下:class Solution {public: bool winnerOfGame(string colors) {原创 2022-03-23 11:16:20 · 1265 阅读 · 0 评论 -
两数之和 IV - 输入 BST
引言这个和之前两数之和问题相差不大,区别在于数据结构的不同,之前第一题那个存储数据用的是数组,这里用的是BST树原题给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。两数之和 IV - 输入 BSTBST 树BST 树的主要特点就是节点的大小大于它左孩子的大小,小于它右孩子的大小做法我的做法参考题解哈希 + dfs先用哈希表把数字存起来,然后再遍历 BST树 。思路比较简单,就是直接哈希+遍历。感觉没有用到BST原创 2022-03-23 10:19:38 · 124 阅读 · 0 评论 -
网络空闲的时刻
引言这道题是leetcode的2039题,是中等类型的题目。有一说一,我对这种中等类型的题目掌握还是有点困难的。最后没做出来(题目意思理解错误)。思路这道题的数学逻辑自不必说,主要说的是代码逻辑。这里用到三个数据结构,二维数组(vector<vector<int>>matrix,这个二维数据用于表示点与点之间的关系,也就是图的关系。一维数组(vector<bool>visit),用于判断这个点是否被遍历过。队列,队列的话可以说是广度优先搜索的标准搭配了。原创 2022-03-21 16:21:28 · 892 阅读 · 0 评论 -
根据二叉树创建字符串
递归对于树的问题,我第一想法就是递归,对于递归来说,这道题目还是清晰明了的这道题并不是很难啊,就简单树的前序遍历而已。这道题主要的灵魂在于括号这个我总结了一下左节点空,右节点空, 都不需要括号左节点空,右节点不空,都需要括号,左节点不空,右节点空,那么左有括号,右无括号左节点不空,右节点不空,那么都需要括号/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNo原创 2022-03-19 16:39:33 · 1001 阅读 · 0 评论 -
leetcode 720题 ———词典最长的单词
原代码这道题,找出长度最大和字符最小化的字符串。 因为字符在输入的列表随机排列,所以我们需要对输入的列表排序,然后一边遍历一边将符合条件的字符存入set中(判断条件为截取最后一个字符的子字符串在set中)一边和ans字符串比较。这样,代码主要的耗时就在排序上面而已。class Solution {public: string longestWord(vector<string>& words) { string ans = ""; set&原创 2022-03-19 01:05:15 · 441 阅读 · 0 评论 -
leetcode 无重复字符的最长子串
引言今天是leetcode的第四天,昨天也就是第三天,我刷的是1357题,感觉它考的是更多对类的掌握,没有啥技术难度,也就没啥收获了,也没必要写博客来记录了今天刷的是leetcode的第三题,无重复字符的最长子串,我可以说我算法功底真是有点差,这道题花了我好长时间去调试。而且我满脑子都是O(n2n^2n2)的算法,如果只是单纯的两重循环O(n2n^2n2),那么这必会超时。所以我做的更多的对O(n2n^2n2)的优化原代码这代码是过了的,不过对比于其他nb的O(n)算法,可以说是垫底的了。clas原创 2022-03-17 00:19:57 · 6479 阅读 · 0 评论 -
链表两数之和
收获这道题并不是很难,涉及到的是整数的加法原则(有点像大整数字符串相加的问题),还涉及到链表的基础知识,比如单向性。然而我这道题交了很多次, 主要原因是没考虑清楚各种情况下(长度上 l1>l2,l1=l2 ,l1 <l2,是否向前进了一位),还有各种情况下的判断条件、所对应的操作是否有所变化,这些是非常重要的代码我这里为了节省空间,直接利用了l1 的空间,如果l1不够长,那就一直给它补0/** * Definition for singly-linked list. * struc原创 2022-03-15 21:20:07 · 1090 阅读 · 0 评论 -
leetcode 第一题两数之和
引言这里开始我就坚持我每天leetcode一题的习惯了,每天写博客来记录自己从这道题中的收获。只能说加油!!!原题连接两数之和收获vector这里充分说明了我c++功底不扎实。类型放回值我原本还声明了一个向量,来push_back i,j。看了题解才了解到返回值可以 以集合的形式 {i,j}初始化vector<int> b(2,-1);//用来承载结果,初始化一个大小为2,值为-1的容器bmap 哈希表的灵活应用由于哈希查找的时间复杂度为 O(1),所以可以利用哈希容原创 2022-03-14 01:20:47 · 1902 阅读 · 0 评论