自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 减小数据结构的尺寸

如果某些情况下,比如只需遍历使用obj_attr,那么在遍历的时候,obj_body这个巨大的数组也会被加载到内存,然后再加载到CPU的缓存中,但是实际上是不需要的,所以这个加载就浪费了很多的时间。所以可以改成这个样子。这样的话,访问obj_attr的时候,多余加载进来的就只有四个字节的obj_body,就不会浪费很多的时间了。当然,如果需要计算链表个数,也就是有只访问next的情况,那么obj_attr也可以改成指针的形式。

2023-03-24 16:38:40 91

原创 循环展开展开

主要原理: 处理器分支语句会表现的比较敏感,存在分支预测,而循环本质上也是分支类型,所以会降低程序的执行速度。选手必须在每个转弯的地方(也就是每个分支点)减速,所以跑到中的弯道少,就意味着跑完的所需时间比较少。所以循环中的判断也就是弯道,循环次数越多,弯道越多,也就需要更多的时间执行。这和开头说的缓存行大小有关系了,缓存行大小16字节,而四次循环展开的情况下,每次循环,刚好是一个缓存行大小,只需涉及一个缓存行的操作。而如果8次,那么需要32个字节,也就是需要加载两个缓存行,肯定更耗时,所以效率会降下来。

2023-03-06 12:25:19 240

原创 Saruman's Army

#include<iostream>#include<cstdio>#include<string>#include<algorithm>using namespace std;#define MAX 1000int N, R, a[MAX];void solve(){ sort(a, a + N); int i = 0, ...

2019-04-04 18:21:54 270

原创 字典序最小问题

#include<iostream>#include<string>#include<stdio.h>using namespace std;#define MAX_N 2000int N;char S[MAX_N + 1];void solve(){ int a = 0, b = N - 1, num = 0; while (a ...

2019-04-04 16:07:33 625

原创 区间调度问题

#include<iostream>#include<algorithm>using namespace std;const int MAX_N = 100000;int N, S[MAX_N], T[MAX_N];pair<int, int> itv[MAX_N];void solve(){ for (int i = 0; i &lt...

2019-04-02 14:32:18 227

原创 Lake Couting_poj2386_p32

#include<stdio.h>#include<iostream>using namespace std;#include<string>#define MAX 100int N, M;char field[MAX][MAX];void dfs(int x, int y){ field[x][y] = '.'; for (int d...

2019-03-29 00:41:39 217

原创 剑指offer题五用两个栈实现队列

题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。class Solution{public: void push(int node) { stack1.push(node); } int pop() { while(!stack1.empty()) { ...

2018-03-14 10:15:19 159

原创 剑指offer题四重建二叉树

题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * struct TreeNode { * int val; *...

2018-03-13 15:55:54 150

原创 剑指offer题目3

题目描述输入一个链表,从尾到头打印链表每个节点的值。/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solutio...

2018-03-06 18:16:13 152

原创 剑指Offer题目1:二维数组中的查找

题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。class Solution {public: bool Find(int target, vector > array) { int i = array.size() - 1;

2018-02-21 10:33:39 170

原创 访问单个节点的删除

题目描述实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*/class R

2018-01-22 15:34:16 316

原创 链表中倒数第k个节点

题目描述输入一个链表,输出该链表中倒数第k个结点。最容易想到的就是先遍历一遍,计算出总的节点数,然后来一次遍历返回倒数第k个节点,而另外一种思路只要遍历一遍即可定义两个指针p1和p2先让p1走k-1个节点,这样剩下n-k个节点这时候再让p1和p2一起走,等p1走到最后一个空节点,也就是走完了剩下的n-k个节点,那么p2同样也是走了n-k个节点,此时p2指向的就是倒数第k个节点

2018-01-20 11:41:06 135

原创 翻转子串

题目描述假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。测试样例:"Hello world","world

2018-01-19 10:43:42 175

原创 清除数列

题目描述请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。给定一个N阶方阵int[][](C++中为vector>)mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector>),保证n小于等于300,矩阵中的元素为int范围内。测试样例:[[1,2,3],[0,1,2],[0,0,1]]返回:[[0,0,3],[0,0,0],[0,0,0]]

2018-01-18 13:32:36 364

原创 像素翻转

题目描述有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。测试样例:[[1,2,3],[4,5,6],[7,8,9]],3返回:[[7,4,1],[8,5,2],[9,6,3]

2018-01-17 14:15:16 188

原创 基本字符串压缩

题目描述利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。给定一个string iniString为待压缩的串(长度小于等于10000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。测试样例"aabcccccaaa

2018-01-16 17:20:37 398

原创 空格替换

题目描述请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。测试样例:"Mr John Smith”,13返回:"Mr%20John%20Smith

2018-01-15 17:46:55 233

原创 确定两串乱序同构

题目描述给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。测试样例:"This is nowcoder","is This nowcoder"返回

2018-01-14 16:48:33 212

原创 原串翻转

题目描述请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。测试样例:"This is nowcoder"返回:"redocwon si sihT"class Reverse {public: string

2018-01-13 23:10:47 296

原创 确定字符串互异

题目描述请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。测试样例:"aeiou"返回:True"BarackObama"返回:Falseclass

2018-01-13 20:48:33 581

原创 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

王宣 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000第一部分:回顾       系统调用的意义:                           操作系统为用户态进程与硬件设备进行交互提供了一组接口--------系统调用                   

2017-03-19 19:09:26 342

原创 跟踪分析Linux内核的启动过程

王宣 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000第一部分:GDB命令简介其实这个网上很多,这里引用网友的一篇博客http://blog.csdn.net/yinjiabin/article/details/7732931第二部分:省略了其中很多调用的函数调用关

2017-03-12 20:36:47 398

原创 一个简单的时间片轮转多道程序内核代码的分析

王宣 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第一部分:环境搭建环境可以直接用实验楼提供的环境,也可以按照孟宁老师github上的步骤来搭建,我是在自己的ubuntu上搭建的。第二部分:实验分析首先上截图代码分析:首先mymain.c里面的#define MAX_T

2017-03-05 18:52:15 472

原创 浅析计算机中汇编代码是怎么执行的

第一部分程序代码:通过如下指令第二部分生成main.s文件,即汇编代码main.s文件汇编代码删掉部分无关代码,如下所示g: pushl %ebp movl %esp,%ebp movl 8(%ebp),%eax addl $10,%eax popl %ebp retf: pushl %ebp movl %esp,

2017-02-23 21:29:51 1023 1

原创 1384 全排列

给出一个字符串S(可能又重复的字符),按照字典序从小到大,输出S包括的字符组成的所有排列。例如:S = "1312",输出为:112311321213123113121321211321312311311231213211Input输入一个字符串S(S的长度 <= 9,且只包括0 - 9的阿拉伯数字)Output输出S所包含的字符组成的所有排列Input示例

2016-09-30 19:59:39 581

原创 1459 迷宫游戏

1459 迷宫游戏基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分数。还有若干双向道路连结这些房间,你沿着这些道路从一个房间走到另外一个房间需要一些时间。游戏规定了你的起点和终点房间,你首要目标是从起点尽快到达终点,在满足首要目标的前提下,使得你的得分

2016-09-30 12:11:35 316

原创 列车调度(Train)

DescriptionFigure 1 shows the structure of a station for train dispatching.Figure 1In this station, A is the entrance for each train and B is the exit. S is the transfer end. All single tracks a

2016-05-15 12:43:20 1239

原创 个位数统计

给定一个k位整数N = dk-1*10k-1 + ... + d1*101 + d0 (00),请编写程序统计每种不同的个位数字出现的次数。例如:给定N = 100311,则有2个0,3个1,和1个3。输入格式:每个输入包含1个测试用例,即一个不超过1000位的正整数N。输出格式:对N中每一种不同的个位数字,以D:M的格式在一行中输出该位数字D及其在N中出现的次数M。要求按D的升序

2016-05-14 15:12:04 2847

原创 打印沙漏

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印***** *** * ********所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。输入格式:输入在

2016-05-14 13:47:14 619

原创 灯塔(LightHouse)

描述海上有许多灯塔,为过路船只照明。(图一)如图一所示,每个灯塔都配有一盏探照灯,照亮其东北、西南两个对顶的直角区域。探照灯的功率之大,足以覆盖任何距离。灯塔本身是如此之小,可以假定它们不会彼此遮挡。(图二)若灯塔A、B均在对方的照亮范围内,则称它们能够照亮彼此。比如在图二的实例中,蓝、红灯塔可照亮彼此,蓝、绿灯塔则不是,红、绿灯塔也不是。现在,对于任何一组给定的灯塔

2016-04-16 23:25:53 1631

原创 祖玛(Zuma)

祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干个彩色珠子,其中任意三个相邻的珠子不会完全同色。此后,你可以发射珠子到轨道上并加入原有序列中。一旦有三个或更多同色的珠子变成相邻,它们就会立即消失。这类消除现象可能会连锁式发生,其间你将暂时不能发射珠子。开发商最近准备为玩家写一个游戏过程的回放工具。他们已经在游戏内完成了过程记录的功能,而回放功能的实现则委托你来完成。游戏过

2016-04-09 15:49:16 3761

原创 范围查询(Range)

描述数轴上有n个点,对于任一闭区间 [a, b],试计算落在其内的点数。输入第一行包括两个整数:点的总数n,查询的次数m。第二行包含n个数,为各个点的坐标。以下m行,各包含两个整数:查询区间的左、右边界a和b。输出对每次查询,输出落在闭区间[a, b]内点的个数。限制0 ≤ n, m ≤ 5×105对于次查询的区间[a, b],都有a ≤ b各点的坐标互异

2016-04-04 01:05:19 1746

原创 冗余关系与并查集

蒜头最近在沉迷小说,尤其是人物关系复杂的言情小说。它看到的人物关系描述得很的麻烦的时候觉得非常蒜疼,尤其是任务关系里有冗余的时候。什么是冗余关系呢?这篇小说里有n句描述人物关系的句子,描述了n个人的关系。每条句子的定义是这样的: XY 它的意思是:X认识Y,Y也认识X我们认为小说中的人物关系是具有传递性的,假如A认识B,B认识C,则A也认识C。冗余关系的定义:就是即

2016-04-03 11:43:10 865

原创 爬楼梯问题

蒜头君自从春节回来以后,体重就像加了特技一样duang~duang~地暴增起来。于是小蒜头打算每天爬楼梯来燃烧体内的脂肪(咦?蒜怎么会有脂肪=.=)。蒜头在爬楼梯的时候脑洞大开,因为蒜头腿短,爬楼梯的时候一次只能迈1级或2级台阶,它就想到了,假如一共有n级台阶的话,它一共有多少种方法能够爬到楼梯顶部呢? 聪明的你快来帮帮小蒜头吧~建议你使用动态规划求解哦,直接搜索是会超时的^o^ 输入格式:

2016-04-03 00:00:36 653

原创 总结

统计整数的二进制展开中数位1的个数这种下面有两种解法。一种是最普通的把整数转换成二进制(转换成几进制就除以几,用%来),每个位都进行一次判断,是就加1并继续转换,若不是就不加1直接继续转换。代码:#include using namespace std;int main(){ unsigned num, count = 0; cin>>num; whi

2016-04-02 20:02:23 470

原创 最长上升子序列

最长上升子序列 (Longest Increasing Subsequence, 常简称为 LIS) 是动态规划解决的一个经典问题。 我们先讲一下子序列是什么。一个数组的子序列就是从里面选出一些元素,并将他们保持原有的先后顺序排列。比如[1, 2, 3, 4, 5]的子序列有[1, 3, 5]、[3, 4],而[1, 5, 3]则不是这个数组的子序列。 这里多介绍一下,还有一个容易与子序列混淆

2016-04-01 17:41:36 309

原创 51nod1417 天堂里的游戏

多年后,每当Noder看到吉普赛人,就会想起那个遥远的下午。Noder躺在草地上漫无目的的张望,二楼的咖啡馆在日光下闪着亮,像是要进化成一颗巨大的咖啡豆。天气稍有些冷,但草还算暖和。不远的地方坐着一个吉普赛姑娘,手里拿着塔罗牌,带着耳机,边上是她的狗。狗看起来有点凶,姑娘却漂亮。Noder开始计算各种搭讪方式的成功概率,然而狗的存在......。奇怪的事情发生了,姑娘自己走了过来,把耳机戴

2016-03-29 16:07:28 581

原创 51nod1428 活动安排问题

有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室? Input第一行一个正整数n (n <= 10000)代表活动的个数。第二行到第(n + 1)行包含n个开始时间和结束时间。开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000Output一行包含一个整数表示最少教室的个数。Input示例

2016-03-26 11:41:36 271

原创 51nod1432 独木舟

n个人,已知每个人体重。独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?Input第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示人数和独木舟的承重。接下来n行,每行一个正整数,表示每个人的体重。体重不超过1000000000,并且每个人的体重

2016-03-25 20:49:17 314

原创 51nod1413 权势二进制

一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成。例如0,1,101,110011都是权势二进制而2,12,900不是。当给定一个n的时候,计算一下最少要多少个权势二进制相加才能得到n。Input单组测试数据。第一行给出一个整数n (1<=n<=1,000,000)Output输出答案占一行。Input示例9Output示例9网上看了下大神的思路,有种

2016-03-25 20:16:02 353

空空如也

空空如也

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

TA关注的人

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