文章分类 -  算法巧解

刷题的时候遇到的一些很巧妙的解法
摘要:原题在这里: 概述题意: 给定一个字符串,找出所有长度为10且出现不止一次的子串。 很常规的hash处理: class Solution { public: vector<string> findRepeatedDnaSequences(string s) { map<string, int> mp 阅读全文
posted @ 2022-03-23 17:44 Renhr 阅读(29) 评论(0) 推荐(0) 编辑
摘要:原题在这里: 概述:求两链表的相同节点,如果没有则为null 于是很日常的遍历code: class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { if (!headA || 阅读全文
posted @ 2022-03-23 12:26 Renhr 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原题在这里: 概述题意,给一个数组,求填平数组(凹处的高低差)所需面积。 想过双指针两端考虑高点收缩; 想过从每一个高度入手; 也想过单调栈(但没想明白怎么用)。 然后debug一个小时用了一个自己的解法: 去重找峰值,删除峰的凹峰【此后数组类型就是(递增+)递减了】,然后遍历。 class Sol 阅读全文
posted @ 2022-03-17 21:20 Renhr 阅读(84) 评论(0) 推荐(0) 编辑
摘要:原题在这里, 概述题意: 在给定数组中,能否找到任意一组元素,下标和值都递增。 这个题我是被三元组给忽悠了,觉得很难,所以直接pass 然后后悔 解法一: 双向遍历,由于只需要找三个,那么从中间元素考虑,左边和右边分别维护最小最大值 对于维护过程也是只需要两次遍历即可,那么final即为O(3n), 阅读全文
posted @ 2022-03-17 19:01 Renhr 阅读(28) 评论(0) 推荐(0) 编辑
摘要:原题在这里, 看这个题就想起了前面写过的合并区间,我寻思(瞎搞)着可能差不多,于是对区间左端点排序然后双指针遍历, 然后发现写不出来(爇鞲)。。。 我又想这肯定dp也能做,但是dp我真不太行(真懒,一点都没有思考),索性直接看题解了, 果然解法一:dp 因为是dp,所以无论左端点右端点排序都行,转移 阅读全文
posted @ 2022-03-17 11:54 Renhr 阅读(21) 评论(0) 推荐(0) 编辑
摘要:本来是一道很普通的水题,但是水出了质量。 一个矩阵元素满足,左->右 and 上->下 递增,问是否含有target数值。 暴力搜索(python): class Solution: def searchMatrix(self, matrix: list[list[int]], target: in 阅读全文
posted @ 2022-03-16 17:14 Renhr 阅读(35) 评论(0) 推荐(0) 编辑
摘要:题目在这里 概述:给定s,p两字符串,在s串中找p的异位串的所有起始下标 常规思路: 由于是小写字母构成的字符串,那么用前缀和sum迭代统计p.len长度的字母,再与p字符串的桶存数组比较即是ans class Solution { public: vector<int> findAnagrams( 阅读全文
posted @ 2022-03-15 20:47 Renhr 阅读(38) 评论(0) 推荐(0) 编辑
摘要:众所周知,二分写法很多,也很容易被卡边界 于是这样的一题把我整糟糕了: 概述:给定递增(不重复)数组,将数组从第k位(任意一位)拆开后,逆序合并,要求log(N)复杂度查找数值。 analyse: 因为二分必须有序,所以仍要进行二分搜索就得预定条件为区间有序, 考虑关键点为:mid与左侧or右侧的比 阅读全文
posted @ 2022-03-11 21:39 Renhr 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原题在这里。 这题我思路完美,但是在实现的时候被疯狂卡边界问题(大晚上的脑子不清醒,一如既往的空想不打草稿地做题)。 概述题意:给定两种符号"*","|"组成的字符串,要求输出给定(数组)区间内"|"包含的"*"数量和。 输入:s = "**|**|***|", queries = [[2,5],[ 阅读全文
posted @ 2022-03-08 22:53 Renhr 阅读(19) 评论(0) 推荐(0) 编辑
摘要:原题在这里。 题意:给定原串和匹配串,'.'表示任意字符,'*'表示零或多个前置字符,问是否匹配。 最开始是考虑的双指针有多少种移动情况,想通过去重之类的操作简化字符处理,然后发现不太行, 于是从逻辑角度选择了dfs处理。 头天晚上做的时候疯狂wa,写了1h左右没写出来,归根于我还是空想法解题,没有 阅读全文
posted @ 2022-03-06 18:48 Renhr 阅读(54) 评论(0) 推荐(0) 编辑
摘要:无语了😶 题在这里 概述:在给定两个字符串ab中寻找最长的不同子序列(长度) 做的时候还wa了两发,误解了题意(找最长子序列,该子序列不能包含另外一个字符串的子序列,然后就直接set存两个字符串的元素,然后遍历a,b根据set.count开始计数,时间复杂度是2*(len(a)+len(b))的线 阅读全文
posted @ 2022-03-05 18:40 Renhr 阅读(20) 评论(0) 推荐(0) 编辑
摘要:常规思路可以很简单的解决这个题 但是要求的算法时间复杂度为log2(m+n) new数组简单双指针合并后输出=O(m+n),不达标 但是也很明显的是,可以优化移动到(m+n)/2+1处位置的时候即停止移动。 主要考虑以下几点: 双指针(x前,y后存中位数)1.两数组合并长度奇偶性对指针移动位置的影响 阅读全文
posted @ 2022-03-03 21:51 Renhr 阅读(138) 评论(0) 推荐(0) 编辑
摘要:很简单的一道题: 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。 但是遇到了一个极其强大的解法: normal: class Solution { public: int add(int num) { return num ? num % 10 + addDig 阅读全文
posted @ 2022-03-03 13:38 Renhr 阅读(55) 评论(0) 推荐(0) 编辑
摘要:原题:https://leetcode-cn.com/problems/find-the-closest-palindrome/ 解题思路是造了几个样例,然后分析分类解决 class Solution { long long num(string s) { long long ans = 0; fo 阅读全文
posted @ 2022-03-02 20:38 Renhr 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题:https://leetcode-cn.com/problems/push-dominoes/ 题意是: 一个字符串由".","L","R"三种字符构成,其中L会向左,R会向右衍变 特别的是,当"."左右分别同时遇到"R"和"L"时,此"."不变。 问最终字符串。 传统解法: class So 阅读全文
posted @ 2022-02-21 16:34 Renhr 阅读(54) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示