自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

转载 DFS和BFS

DFS 算法思想:一直往深处走,直到找到解或者走不下去为止BFS算法DFS:使用栈保存未被检测的结点,结点按照深度优先的次序被访问并依次被压入栈中,并以相反的次序出栈进行新的检测。BFS:使用队列保存未被检测的结点。结点按照宽度优先的次序被访问和进出队列。框架:BFS:#include<cstdio>#include<cstring>#include<queue&gt...

2018-05-14 15:24:24 695

原创 国王赏赐金币问题(减治法)

题目:国王赏赐大臣30枚金币,但是有一枚是假的,并且假的金币较轻,国王让大臣仅用一个天平,比较最少的次数得到答案。也就是,在n枚外观相同的硬币中,有一枚是假币,并且已知假币较轻,可以通过一架天平来任意比较两组硬币,从而得知两组硬币的重量是否相同,或者哪一组更轻一些。解法:我们可以把假币一分为二,也就是把n枚硬币分为两组,每组有n/2个硬币,如果n为奇数,就留下一枚硬币,然后把两组硬币分别放到天平的...

2018-04-09 23:37:11 3179 1

原创 线性时间选择(Top K)

直接上代码:#include<iostream>using namespace std;const int maxn = 10000;int kp[maxn], mid[maxn];void InsertionSort(int kp[], int n) { for (int j, i = 1; i < n; i++) { int tmp = kp[i]; for...

2018-04-09 23:34:07 596

原创 大数相乘(分治法)

前言:A,B两个大数,都为n位,要计算A*B,需要将A和B划分成两等份,如下图所示普通的做法是A*B=a1*b1*10^n+(a1*b0+b1*a0)*10^(2/n)+a0*b0举个例子:1234*9876=(12*98)*10000+(12*76+98*34)*100+34*76对于这个算法的时间复杂度,我们需要做4次n/2级别的乘法和3加法。即T(n)=4*T(n/2)+O(n),时间复杂度...

2018-03-29 18:54:54 5835 5

原创 大数相乘

前言:采用的方法是逐位相乘进位法。例子1:A=24=2*10+4=(4,2);B=12=1*10+2=(2,1);C=A*B=(4*2,4*1+2*2,2*1)=(8,8,2)=228;例子2:A=17=1*10+7=(7,1);B=25=2*10+5=(5,2);C=A*B=(7*5,7*2+1*5,1*2)=(35,19,2)=(5,22,2)=(5,2,4)=425;代码如下:#includ...

2018-03-27 15:31:45 148

原创 2分查找和3分查找

前言:本文当中的2分查找和3分查找的数组都是有序的。一.3分查找将数组分为3部分,1/3处和2/3处。思想和2分查找的思想一样。代码如下:#include<iostream>#include<string>using namespace std;int F(int arr[], int l, int r, int m) { int mid1 = (r - l) / ...

2018-03-26 21:01:42 835

原创 线性时间选择(TOP K)

问题描述:找出一个数组中第K小的元素,时间复杂度为O(n)。解法:1.首先大家都会想到的解法是排序,之后找出第k个元素,但是排序的时间复杂度不符合要求,或者需要额外的空间。2.利用快排的思想,以枢纽(随机得到)为界,将数组分为2部分,一部分小于等于这个枢纽值,一部分大于这个枢纽值,与快排不同的是,我们只处理一部分,另一部分舍弃。代码如下:#include<iostream> #in...

2018-03-25 15:37:00 2811

原创 荷兰国旗问题

前言: 问题网上已经很清楚了,和快排一样的partition。下面直接上代码。对代码有疑问的朋友,欢迎留言。#include<iostream>#include<algorithm>using namespace std;void swap(int arr[], int i, int j) { int tem; tem = arr[i]; arr[i] = ar...

2018-03-23 21:33:00 131

原创 快速排序

前言:对于快速排序的原理网上或书本上很清楚,在此就不再累赘了。对代码有疑问的朋友欢迎留言。一定回复(及时)对于代码中STL中一些函数的用法,请自行百度或谷歌。此代码效仿左程云大佬的。在此表示感谢!#include<iostream>#include<algorithm>#include<time.h>#include<cstring>#def...

2018-03-22 19:39:21 111

原创 棋盘覆盖问题

问题描述在一个2^k×2^k 个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。                                                                          ...

2018-03-22 11:49:38 282

原创 求X^Y

利用分治法求X^Y注意:Y的奇偶#include<iostream>using namespace std;float fast_pow(float x, float y) { if (y == 1) { return x; } else { if ((int)y%2 == 0) { return fast_pow(x, y / 2)*fast_pow(x, ...

2018-03-21 21:14:54 308

原创 L1-044. 稳赢

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。输入格式:输入首先在第一行给出正整数K(<=10),即平局间隔的次数。随后每行给出对方的一次出招:“ChuiZi”代表“锤子”、“JianDao”代表“剪刀”、“Bu”代表“布”。“End”代表输入结束...

2018-03-20 21:44:25 169

原创 L1-043. 阅览室

天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录...

2018-03-20 20:52:28 176

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除