![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法入门复习
二队长
这个作者很懒,什么都没留下…
展开
-
算法练习 哈希表
题目地址:https://leetcode-cn.com/problems/two-sum/这题目一开始看的话感觉是可以直接双重for循环过的,然后想了一下有没有其他的办法,看了一些思路之后用了哈希表解决了这个问题。这一题因为最后要返回下标,因此不能只存值,得用键值对的形式存储,因此要用到map,又因为可以按照任意顺序输出答案,因此使用无序的unordered_map可以更为高效的获得答案。因为我们要获得两个整数加起来为目标值,我们可以首先把vector里面的值先存到unordered_map中,然.原创 2022-04-05 14:55:07 · 96 阅读 · 0 评论 -
STL map以及一些stl的基本使用记录
map是一类关联式容器,增加和删除节点对迭代器影响很小,除了操作的那几个节点之外,对其他节点都没什么影响。下面总结几个知识点1、定义一般这样定义,前面是key后面是valuemap<int, string> mapStudent;map自带排序,不能不排序2、插入数据insert插入mapStudent.insert(pair<int, string>(1, "student_one")); 使用这一种插入,当map中有这个关键字的时候是插入不了的直接用数组原创 2022-03-31 19:47:01 · 86 阅读 · 0 评论 -
算法入门复习8【算法1-4】递推与递归
洛谷刷题记录P3612 [USACO17JAN]Secret Cow Code S原题地址:https://www.luogu.com.cn/problem/P3612一个类似于找规律的题目,刚开始没想到,看了题解之后才理解。因为n很大,所以肯定不是构造一个这么大的字符串,然后去数组里面查询,肯定是去发现一定的规律,然后直接在最初的字符串中指出来。只要当前的n在后半边,只需要先用n减去整个字符串长度的一半,就相当于从复制的字符串开始数多少多少个。因为复制的时候要先复制一个尾数,然后再从头开始,因此原创 2022-03-24 21:43:37 · 158 阅读 · 0 评论 -
算法入门复习7---递推
洛谷刷题记录P1990 覆盖墙壁原题目地址:https://www.luogu.com.cn/problem/P1990这题目我一开始是没想到递推公式的,开头我想到的是这题目应该可以递归调用去解决,使用一个参数代表还剩下多少块砖。但因为有两种砖头,因此不能简单的使用一个函数去表示,就得写两个函数,因为这个递归的返回值只有他本身的调用,因此直接使用递推更好。递推的公式我是结合了题解去思考的,我个人思考的感觉比较没有条理。其中f[n]代表了还剩下n块没有覆盖的下一步使用两角砖能有几种方法,g[n]就原创 2022-03-22 19:34:06 · 97 阅读 · 0 评论 -
算法入门复习6
洛谷刷题记录【算法1-4】递推与递归P1036 [NOIP2002 普及组] 选数原题目地址:https://www.luogu.com.cn/problem/P1036看到题目可以想到直接枚举就可以获得所有结果,一开始我想的有点复杂了,后来发现直接递归就可以过了。递归的思路就是直接先写一个函数,这个函数就是用来解决这个问题的,然后把特殊情况给写入,最后直接递归调用自己就可以获得解了。代码:#include<bits/stdc++.h>using namespace std;原创 2022-03-22 12:40:20 · 54 阅读 · 0 评论 -
算法入门复习5
洛谷刷题记录【算法1-4】递推与递归P1928 外星密码原题地址:https://www.luogu.com.cn/problem/P1928这题看到的时候感觉想不出来,想了记忆化和动规都想不出来,看了题解才知道就是直接递归就可以了。但是这题写起来也暴露出来了我的问题,那就是string类型的处理在很久没使用后变的很生硬了,也是改了很多次,最后用题解里的直接处理当前输入的字符来解决了,我自己本身是把整个输入之后再进行判断,但是那样就会更加复杂,并且中间出现小问题也会不好处理。代码:#inclu原创 2022-03-17 21:00:06 · 49 阅读 · 0 评论 -
算法入门复习4
洛谷刷题记录【算法1-4】递推与递归P1464 Function原题目地址:https://www.luogu.com.cn/problem/P1464题目说了一个递归函数,但是这个递归函数在数字较大时会花费非常多的时间,并且其中很多的情况都是重复运算。因此第一步先把这个题目模拟出来,在模拟的时候我犯了一个错,其中题目说了是a,b,c其中一个大于20则返回w(20, 20, 20),而我在写的时候不小心写成了 >= 导致了无限循环,我还没发现 模拟完之后进行记忆化搜索,只需要把已经运算过的结原创 2022-03-17 20:01:03 · 41 阅读 · 0 评论 -
算法入门复习3
洛谷刷题记录【算法1-4】递推与递归P1028 [NOIP2001 普及组] 数的计算拿到手之后思考,左边加上一个数字,然后继续进行操作,相当于把加上的那个数字的可能性加上,比如3这个数字在这个规则下有2种排列可能性,那么把3靠在6的左边之后,也就只剩下2种排列可能性了,那么只需要把0 — (n/2)数字的可能性全部求出来然后给到n就可以了。所以递推为 f[n] = f[n / 2] + f[n / 2 - 1] + f[n / 2 - 2] + … + f[1] + f[0];只需要从头一直按顺原创 2022-03-15 21:11:12 · 50 阅读 · 0 评论 -
算法入门复习2
洛谷刷题记录P1002 [NOIP2002 普及组] 过河卒简单动态规划,自己写第一遍用了我自己的习惯,先写一个函数递归解决这个问题,然后再去创建一个标记数组,标记每个点的数值,只要这个点的数值有被求出来过就直接使用,但是可能是程序中间有什么小漏洞,找不出来。于是看了别人的题解,使用数组存放,通过状态转移方程直接转移中间量,这样代码量一下就减少了很多,看起来更加清晰了,同时,直接把整个棋盘的x,y点加2,这样就不用再去判断马的点是否数组越界,省了很多的代码。因为每个点的可能性是右边和下面的可能性之合原创 2022-03-15 20:24:14 · 57 阅读 · 0 评论 -
算法入门复习
洛谷刷题记录P1044 [NOIP2003 普及组] 栈算是挺简单的一个动态规划题目,题目很长,但是实际上就是求一个栈在给定数字的情况下出栈的可能性总数。因为这题一看就可以暴力枚举所有可能得到答案,但时间可能会超,所以我估计是动态规划题目。但是因为太久没写过题目了,导致第一时间状态转移方程写错了。只需要去模拟栈,用一个f(n, m),其中n代表栈里面还有多少数字,m代表剩下多少数字没放进去,然后定义一个函数,带入n,m直接计算,m=0时就结束了,就返回1,m!=0时且n=0,返回f(1, m - 1原创 2022-03-13 21:52:12 · 1110 阅读 · 0 评论