![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
刷题
有意思的算法题。
嘻嘻作者哈哈
喜欢折腾技术。寒窗苦读无人晓,一朝成名天下知。
展开
-
牛客 BM83 字符串变形(大小写转换,字符串反转,字符串替换)
字符串反转,截取子串,字符串替换,大小写转换原创 2022-06-29 10:44:35 · 547 阅读 · 1 评论 -
leetcode数组中的第k个最大元素或剑指offer数据流的第K大数值
方法1:快速排序的partiton结合减治法。方法2:小顶堆。原创 2022-06-03 13:18:49 · 392 阅读 · 0 评论 -
leetcode75. 颜色分类
采用双指针,类似快速排序的`partition`,将pivot设置为1.原创 2022-06-03 12:59:47 · 357 阅读 · 0 评论 -
leetcode 114. 二叉树展开为链表
题目二叉树展开为链表思路1由于函数签名的返回值为void,也就不能使用辅助链表+前序遍历的方式。采用分解的方法,通过递归,拆解为子问题。子问题为将左子树和右子树转为链表。子问题解决后,再将左子树变成右子树,原右子树接到新的右子树(原左子树)的最右边。代码class Solution { public void flatten(TreeNode root) { if(root == null) return; // 分解的思维 flat原创 2022-05-28 10:42:31 · 198 阅读 · 0 评论 -
leetcode 54. 螺旋矩阵
leetcode:54. 螺旋矩阵牛客:BM98 螺旋矩阵模拟法参考代码随想录:代码随想录-螺旋矩阵首先,需要确定定义边界的规则,从而确定模拟的区间,比如采用左闭右开,左闭右闭等。本题建议采用左闭右开,也就是起点闭合,终点打开。其次,循环次数也很重要,用来确定模拟什么时候结束。本题每转一圈是走2行和2列,因此模拟次数为行数和列数中最小值的一半。如果为奇数行或奇数列,每次走2行2列,最后会剩下1行或1列,因此最后需要模拟打印剩下的1行或一列。import java.util.ArrayL.原创 2022-05-15 14:46:10 · 309 阅读 · 0 评论 -
链表中环的入口节点或环形链表Ⅱ
题目牛客:链表中环的入口节点Leetcode:环形链表Ⅱ题目分析第一件事,判断是否有环,如果没有就直接返回null;第二件事,找到环的入口;思路使用双指针法判断是否有环,初始时,快慢指针都指向头结点,之后慢指针每次走1步,快指针每次走2步。如果有环,则快慢指针一定会相遇。如上图所示,假设环的入口节点为a,环的长度为b,假设相遇点为m。可得相遇时,慢指针走了m步,快指针走了2m步。快指针先走到m点,之后在环里转了n圈又回到m点,之后两指针相遇。可得快指针走的步数2m = m + nb原创 2022-05-13 20:52:41 · 261 阅读 · 0 评论 -
出现频率最高的 k 个数字或前 K 个高频元素
题目LeetCode剑指 Offer思路使用HashMap存储数字到出现频率的映射。使用大小为K的最小堆存储HashMap中的映射关系,使用PriorityQueue实现最小堆。建堆的规则采用出现频率作为依据。最后将堆中的键值对数据中的键取出。代码import java.util.Comparator;import java.util.HashMap;import java.util.PriorityQueue;import java.util.Map;public class原创 2022-02-28 23:29:54 · 173 阅读 · 0 评论 -
剑指 Offer II 048. 序列化与反序列化二叉树(前序遍历非递归、递归、层次遍历)
思路通常存储二叉树是采用链式的非线性方式存储,而此题需要用线性的存储方式。思维不同。首先确定遍历方式。将根节点作为第一个节点很方便,之后在遍历左子树和右子树,故可采取前序遍历和层次遍历。其次,线性的字符串存储,需要用分割符来划分不同的节点,可以采用逗号作为节点分隔符。然后,在链式存储中,由于左右子节点指针的存在,节点之间的关系可以通过指针指向来确定,树的结构也由此唯一确定,所以空节点一般不用考虑。而在线性存储结构中,没有指针确定节点之间的关系,所以需要考虑空节点,从而才能确定唯一的树结构。前序原创 2022-01-22 23:47:56 · 493 阅读 · 0 评论 -
剑指 Offer II 047. 二叉树剪枝(非递归和递归版本)
题目:二叉树剪枝思路分析首先先判断用前序、中序、后序、层次遍历中的哪一种。根据题目要求,当要将当前节点剪掉时,其左子树和右子树必须已经被剪掉,所以遍历顺序为左右根的后序遍历最合适。如果用其他遍历方式,根节点是在右子树之前被遍历,不好判断其右子树是否已经被剪掉了,自然也就不能确定当前节点是否需要被剪掉。非递归后序遍历代码(单栈)zhiyouclass Solution { public TreeNode pruneTree(TreeNode root){ if(root ==原创 2022-01-21 22:27:31 · 534 阅读 · 0 评论 -
日期累加
题目:日期累加一、题型 此题为知道日期A和天数,求日期B。二、思路 日期类问题的一种常用求解方法是预处理。即先预处理出所有月份的天数并保存,当我们真正处理数据时,只需要0(1)的时间复杂度便可读取到保存的天数。用空间换取时间。并判断闰年和平年。三、代码1.简洁版:直接有天数,计算月份和年份//题型:根据旧日期和累加的天数,计算出新日期#include<iostream...原创 2020-03-18 15:03:04 · 473 阅读 · 0 评论 -
打印日期
题目链接:打印日期一、题型 此题为知道日期A和天数,计算日期B。二、思路 日期类问题的一种常用求解方法是预处理。即先预处理出所有月份的天数并保存,当我们真正处理数据时,只需要0(1)的时间复杂度便可读取到保存的天数。用空间换取时间。并判断闰年和平年。三、代码#include<iostream>#include<iomanip>#include<c...原创 2020-03-18 14:12:25 · 179 阅读 · 0 评论 -
hdu oj2034 逆向思维解决(set 和 map搞定)
原因:因为set和map都是关联式容器,可以按键值自动排序,可以省掉使用其他容器所消耗的排序时间。1.map实现:思路:用键值作为A集合的数据,实值作为判断是否在集合在B集合的标志。在输入集合B中的数据时判断集合B的元素是否和集合A重复,如果重复则将改变重复元素对应的对组实值。#include<iostream>#include<map>using namespa...原创 2019-03-17 23:45:58 · 180 阅读 · 0 评论 -
hdu oj 2036 (C++版)
思路:https://blog.csdn.net/liyuanbhu/article/details/51921096参考文章:https://blog.csdn.net/u012239518/article/details/78046931#include<iostream>#include<vector>#include<iomanip>#incl...原创 2019-03-17 20:43:16 · 240 阅读 · 0 评论 -
C语言求一段连续整数中偶数的平方和与奇数的立方和(hduoj 2007)
题目链接:hdu oj 2007思路:首先先输入一段连续数据的范围,比如 2 5:数据为2 3 4 5。关键是输入的m和n的大小不确定,设置m为小的数据,n为大的数据,为了方便计算,如果不这样,就要算两遍。//方便的方法:vs2019运行#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main(){ int m,...原创 2019-02-18 14:13:49 · 5454 阅读 · 0 评论 -
hdu oj 2025
思路:1.遍历字符串,找出最大的字符,记录最大字符2.遍历字符串,找到最大字符的位置,并"(max)"插入到最大字符所在位置的下一个位置。C++使用STL完成#include<iostream>#include<string>using namespace std;int main(){ string s; while (cin >> s...原创 2019-03-09 10:49:22 · 211 阅读 · 1 评论 -
hdu oj 2018 母牛的故事(暴力递归,记忆化搜索,动态规划)
思路分析:注:有点绕,建议把n假设为一个确定的数再去理解,比如n=5。1.老母牛能下崽,因为 (第n年母牛数)=(n-1年母牛数)+ (第n年新出生的母牛数)。2.第n年新出生的母牛数又等于第n年的老母牛数,所以要求第n年的母牛数目,必须知道n-1年的母牛数目和第n年的老母牛数目。3.因为4年时间小母牛就变成老母牛,所以(第n年的老母牛数目) = (第n-3年的老母牛数目) + (第n-...原创 2019-03-09 12:07:40 · 311 阅读 · 0 评论 -
hdu oj 2028
思路:lcm=a*b/gcd,所以关键再与求最大公约数, 最大公约数用辗转相除法。gcd(a,b)=gcd(b,a%b)#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>//思路:整数a和b,lcm = a*b/gcd//辗转相除法int gcd(int a, int b) {...原创 2019-03-09 16:34:43 · 245 阅读 · 0 评论 -
hdu oj 2020 插入排序AC
题目链接:hdu oj 2020思路:开辟动态数据存储数据,之后再输入数据的过程中使用插入排序实现变输数据边排序,效率比冒泡高, 排序比较时元素使用abs来求绝对值, 最后记得回收内存,避免内存泄漏。vs2019运行#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#inclu...原创 2019-03-07 10:12:46 · 237 阅读 · 0 评论 -
hdu oj 2021 取整求余完成
题目链接:hdu oj 2021思路:用人民币的数目对人民币面值取整,若不为0则表示需要改面值的钞票,为0则继续下一个面值,之后对面值求余得到剩下的钱,累加取整的钞票张数。vs2019运行:#include<iostream>using namespace std;//思路:1.用数组保存人民币的面值,由大到小降序排列,因为发工资时先发大面值,所以计算时也从大的开始计算;...原创 2019-03-07 11:29:24 · 268 阅读 · 0 评论 -
hdu oj 2022 不用二维数组,两个for循环实现
题目:hdu oj 2002思路:定义一个存储最大绝对值的变量,用两个循环模拟行和列,在输入分数时找出最大值,行,列。vs2019运行:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<math.h>int main(){ int m, n; while (scanf("%d %d", &...原创 2019-03-07 15:27:36 · 236 阅读 · 0 评论 -
hdu oj 2031(十进制转为其他进制)
题目:hdu oj 2031思路和代码注释如下:#include<iostream>#include<stack>using namespace std;//十进制转换为2~16进制//思路:1.用该数不断对目标进制不断求余,将余数保存,之后用商(取整)继续求余,直到商为0为止//2.因为最后是逆序输出,所以很适合栈先进后出的访问规则,所以我就用了stl里的...原创 2019-03-16 20:29:50 · 380 阅读 · 0 评论 -
hdu oj 2023 的自己范的错误
思路:用二维数组存储学生的成绩,之后单独求平均成绩,各科平均成绩,大于平均成绩的学生数vs2019运行#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int main(){ int n, m; while (scanf("%d%d", &n, &m) !=...原创 2019-03-08 10:32:33 · 227 阅读 · 0 评论 -
判断是一年的第几天(hudoj 2005)
题目链接:hudoj 2005思路:首先用二维数组(方便操作)存储闰年和平年每个月有多少天,之后判断平年和闰年,最后加上不足一个月的天数.//VS2019运行#define _CRT_SECURE_NO_WARNINGS#include&amp;lt;stdio.h&amp;gt;//闰年:1,能整除4 ; 2,能整除400或不能整除100#define _CRT_SECURE_NO_WARNING...原创 2019-02-17 21:10:07 · 192 阅读 · 0 评论