c/c++
文章平均质量分 73
ji_r
这个作者很懒,什么都没留下…
展开
-
单调栈
什么是单调栈?这个概念是在leetcode做题时接触的,就是通过栈的push()和pop()操作,维护一个有序的序列(依次出栈的元素)。如:7 4 3 8 10 9 13下面则通过leetcode中的题目来说明它如何在问题中使用?739. 每日温度题目描述:请根据每日气温列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用0来代替。例如,给定一个列表temperatures = [73, 74, 75...原创 2020-06-12 21:06:25 · 199 阅读 · 0 评论 -
并查集(Union-find set)
它是一种维护集合的数据结构,它的名字"并" "查" "集" 。即 union / find / set。并查集产生的每个集合都是一棵树(tree) 。基本操作:1.合并两个集合union。2.判断两个元素是否在一个集合中find。实现:利用一个数组int father[N];其中父节点自身也在1-N之中用来记录父节点:即father[i]表示的i节点的父亲节点。当a和b的father[a]==father[b]时,a和b才是联通的。初始化:void init(int fa[], i..原创 2020-06-08 20:13:36 · 367 阅读 · 0 评论 -
递归模拟哈诺塔移动过程
汉诺塔问题:https://baike.baidu.com/item/%E6%B1%89%E8%AF%BA%E5%A1%94/3468295?fr=aladdin思路:先借助C将A上面n-1个盘子移到B中;然后将A上最大的盘子移到C中;再借助A将B上的n-1个盘子移动到C上。#include<iostream>using namespace std;void mov...原创 2020-05-05 21:18:28 · 245 阅读 · 0 评论 -
*p, *&p, &*p的区别
#include<iostream>using namespace std;int main(){ //&: 取地址(引用), *取值(解引用) int a = 10; int *p = &a; //&a: 取a的地址值, p是一个指针,指向a cout << "*p=" << *p << ", p=" &...原创 2020-05-01 22:57:57 · 2851 阅读 · 0 评论 -
OJ常规题------利用结构体解决学生成绩排序的问题
此类问题一般是输入N个学生的个人信息,一般包括学生的姓名、学号、年纪、成绩......这些信息,我们将每个学生的这些信息组合起来,利用Struct声明一个结构体,将它的信息作为其成员变量。然后我们根据它的排序要求编写进行计较规则的方法,取名cmp()。再调用系统的sort函数即可(需要加声明:#include<algorithm>)。通过几个例题来看一下这类问题的解题思路。提示...原创 2018-07-16 23:04:06 · 2223 阅读 · 1 评论 -
大数排序+大数相加+大数相乘
在我们通常遇到的数的计算中,往往范围比较小,int、long、long long等就可以满足,但是在一些题目或者特殊情况时,我们遇到的数位数很长,基本的一些数据类型显然不满足,所有采用字符型数组输入这个数字,进行一些计算。(char [] 或者string;注意:char[]结尾一定要有'\0'字符)。下面通过三个例题介绍一些大数的相关操作。1、大数排序我们可以利用输入字符串的长度对这些数进行比较...原创 2018-07-03 17:49:53 · 474 阅读 · 0 评论 -
动态规划解决---最长递减(或递增)序列
定义:在一个没有排好序的数组中,找最长的单调递减或单调递增的序列。解题思路:通过动态规划解题。假设从0--(i - 1)已经构成了长度为s的递减序列,且这些序列中的末尾值中的最大值为t;1、如果a[i] < t,则假如到这个序列中去,长度变为s + 1。对应的末尾值变为a[i]。2、如果a[i] == t, 则说明从0 - i 的最长序列长度为s。3、如果a[i] > t,a[i]不一...原创 2018-06-10 20:28:43 · 2592 阅读 · 0 评论 -
(C语言)链表的实现集合的相关操作
集合的特征:确定性/ 互异性/ 无序性。常见的操作:1、查找集合中是否包含这个数据元素:Contains();2、添加一个新成员数据,集合中不能存在这个元素。AddMember();3、删除指定元素, 找到这个元素, 删除;如果没找到,则提示没找到,返回0(表示false)。Delete();4、合并两个集合,不能有相同的元素。5、求交集,找相同的元素。6、求差集,例如:A{1, 2, 3}。B{...原创 2018-06-01 22:38:43 · 2331 阅读 · 1 评论 -
求解组合数取模---拓展欧几里德和费马小定理求解逆元
组合数:C(n, m) ; 组合数取模:C(n, m) % mod,mod是一个很大的数。1.公式:2.性质:(1)C(n,m)= C(n,n-m) 其中有C(n, 0) = 1; (2)C(n,m)=C(n-1,m-1)+C(n-1,m)。可以用作递归中的公式。性质2和杨辉三角的相似性(核心部分就是利用了性质2)。例题:打印杨辉三角:#include<i...原创 2018-06-13 15:24:41 · 753 阅读 · 0 评论 -
矩阵的转置和旋转
转置:转置很简单的,就是a[i][j] -- > a[j][i]即可。可以开辟一个新的二维数组。b[i][j] = a[j][i]即可。例题:输入一个N*N的矩阵,将其转置后输出。要求:不得使用任何数组(就地逆置)。此时应该怎么办呢?只要根据题目要求,直接输出就可以啦!(解释一下,为什么我的输出部分要写成下面这样,把最后一列单独输出出来, 那是因为在大多数的oj上,运行通过的要求是最后一列输...原创 2018-05-07 21:23:01 · 4922 阅读 · 0 评论 -
前缀、中缀、后缀表达式及中缀转后缀表达式
前缀表达式:不含括号的算术表达式,而且是将运算符写在前面,操作数写在后面的表达式。求法:首先从右往左扫描表达式,从右边第一个字符判断,如果当前字符是数字,则一直到字符串的末尾再记录下来;如果是运算符,则将右边最近的两个数字串做相应的运算,以此作为一个新串并记录下来。一直扫描到最左端停止。例子:(a + b)* (c + d) : *+ab+cd。理解:根据优先级,把数字位置不同,有那两个可以做运...原创 2018-05-19 23:38:26 · 4463 阅读 · 1 评论 -
动态规划及实例
01背包问题:一个容量为C的背包,n个物品,他们的重量分别是w[i],价值分别是v[i],怎样选择装入的物品使价值最大?分析:面对每个物品,我们只有选择拿取或者不拿两种选择,不能选择装入某物品的一部分,也不能装入同一物品多次。所以声明一个 大小为 m[n][c] 的二维数组,m[ i ][ j ] 表示 在面对第 i 件物品,且背包容量为 j 时所能获得的最大价值 ,那么我们可以很容易分析得出...原创 2018-04-26 21:48:17 · 508 阅读 · 0 评论 -
约数的个数
题目描述:输入n个整数,依次输出每个数的约数的个数。输入描述:输入的第一行为N,即数组的个数(N<=1000),接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000),当N=0时输入结束。输出描述:可能有多组输入数据,对于每组输入数据,输出N行,其中每一行对应上面的一个数的约数的个数。分析:如何求一个数的约数个数,常规的就是从1- n(表示这个数本身...原创 2018-04-21 23:10:51 · 4598 阅读 · 0 评论 -
快速幂
这里介绍的是求a^b的运算。常规思路:b个a相乘。int pow(int a, int b){ int ans = 1; for(int i = 1; i <= b; i ++){ ans *= a; } return ans;} 但是当b很大时,复杂度很高,所以可以通过分奇偶来讨论。当b是奇数时, a^b = a ^ (b/2) * a^(b/2) * a;当b是偶数时,a^...原创 2018-05-02 17:52:24 · 117 阅读 · 0 评论 -
日期处理
日期的标准输出格式:yyyymmdd(y : year, m : month, d: day),例如:2000-05-01。闰年的计算:什么是闰年?即年份可以被4整除但不能被100整除,或者可以被400整除。判断闰年的参考代码:bool isLeapYear(int year){ return (year % 4 == 0 && year % 100 != 0) || (year...原创 2018-04-24 21:47:04 · 157 阅读 · 0 评论 -
斐波那契数列
这次介绍的是以斐波那契数列为原型,解决大家在一些编程题中遇到的。如上楼梯。斐波那契数列在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)参考代码:int Fibonacci(int n){ int fib[n + 1]; fib[0] = 0; fib[1] = 1; for(int i = 2; ...原创 2018-04-09 19:28:02 · 202 阅读 · 0 评论 -
大整数阶乘
题目描述: 输入一个正整数N,输出N的阶乘。输入描述:正整数N(0<=N<=1000)。输出描述: 输入可能包括多组数据,对于每一组输入数据,输出N的阶乘。分析:思路和一般求阶乘没有区别,只是数大到一定范围,就会超过范围。所以需要使用数组存储数据,注意最后输出时,是倒序输出就可以了。参考代码:#include<iostream>using namespace std;/...原创 2018-04-18 22:54:49 · 270 阅读 · 0 评论