C++刷题
陈默涵
这个家伙真的是个小白
展开
-
数组形参
在刷题的时候遇到了这样的一道问题在32位的机器中voidexample(characWelcome[]){ printf("%d",sizeof(acWelcome)); return;}voidmain(){ characWelcome[]="Welcome to Huawei Test原创 2016-03-25 00:23:06 · 711 阅读 · 0 评论 -
归并排序的代码实现与思考
在严蔚敏的数据结构中的链表部分就写了归并排序,在10.5中也实现了归并排序,只是是对一个未排序数组进行的例如未排序数组49,38,65,97,76,13,27,49.首先是要对该数组进行分割,对分割的进行排序,也就是2路归并排序。代码实现如下:#include<iostream>using namespace std;void Merge(int *a,int *temp,int low,int原创 2016-06-06 14:36:12 · 633 阅读 · 0 评论 -
0-1背包问题分析及代码实现
0-1背包问题动态数组申请原创 2016-08-30 21:39:20 · 3530 阅读 · 0 评论 -
求字符串中最长对称字符串的长度
求字符串中最长对称字符串的长度, 例如google中最长对称字符串的个数是4 iqiyiyiq中最长对称字符串的个数是6; 这种题目呢,不知道如何用语言表达清楚自己的思路,也许是自己理解的不够清楚吧,但是这种题目利用具体事例就可以将代码写出来; 代码如下:#include<iostream>#include<string>using namespace std;int isSymmet原创 2016-08-29 21:17:01 · 1864 阅读 · 0 评论 -
给定一个长度为N的数组,找出一个最长的单调自增子序列
在牛客网上看到了这么道题给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱) 例如:给定一个长度为8的数组A{1,3,5,2,4,6,7,8},则其最长的单调递增子序列为{1,2,4,6,7,8},长度为6.结果做了一下午最终发现思路是错的,看了答案豁然明朗了,所以赶紧记录下来。答题思想就是如果后者比前者大并且前者递增数组的长度+1大于后者递增数组的长度,就说明满足,原创 2016-08-18 23:29:35 · 8235 阅读 · 0 评论 -
将char字符转换成int整型,字符串与整型之间的相互转换
int 与字符之间的转换int与字符串之间的转换原创 2016-08-03 11:41:23 · 44360 阅读 · 4 评论 -
cin,cin.get(),cin.getline()
今天写代码的时候遇到了这样的问题,对于字符串或者是字符数组进行cin输入的时候,遇到空格就会结束,例如: string str1; char str[]; cin>>str; cin>>str1; 如果输入 we are happy. 但是实际上str 或者str1只是读入了we 因为cin遇到Enter、Space、Tab键时,读入结束。所以当要输入有空格的字原创 2016-06-17 18:39:21 · 398 阅读 · 0 评论 -
数组指针与指针数组
数组指针,顾名思义就是指向数组的指针,形如 char(*a)[4],就是变量名为a的指针指向一个字符数组。 如果输出char a[5]={‘A’,’B’,’C’,’D’}; char (*p3)[5] = &a; cout<<*p3; 则输出 ABCD cout<<**p3;则会只输出 A co原创 2016-07-14 21:36:43 · 291 阅读 · 0 评论 -
二维数组作为形参进行传递
在剑指offer中有道二维数组查找的问题,需要进行二维数组的参数传递,经过查阅知道对二维数组进行参数传递时,形参需要知道第二维的维度。 函数原型如下:bool search(int a[][4],int key,int rows,int columns){二维数组int a[4][4]={1,2,8,9, 2,4,9,12, 4,7,10,13, 6,8,11,15};原创 2016-06-17 15:50:58 · 587 阅读 · 0 评论 -
操作系统中的内存分配
连续的内存分配内存通常有两个区域 - 存放操作系统的区域 - 存放用户进程的区域 将多个进程存放到内存中需要考虑如何将输入队列中需要调入内存的多个进程进行内存分配。采用连续内存分配时,每个进程位于一个连续的内存区域。内存分配方法固定分区分配 将内存分为多个固定大小的分区,每个分区只能容纳一个进程。当进程终止时,其分区可以被其他进程所利用。 现在这种方案已经不再使用,主要用于批处理的原创 2016-07-02 22:17:44 · 1028 阅读 · 0 评论 -
二叉排序树与双向链表的转换
前几天见到过这个题,觉得打破了自己老套的思路,所以记录了下来。 题目是:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整结点指针的指向。如图所示10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 今天又看到了这道题吗,可惜前几天看的都原创 2016-07-23 11:34:47 · 818 阅读 · 0 评论 -
二元查找树与排序的双向链表的转换
这道题目来自 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 首先我们定义的二元查找树节点的数据结构如下: struct BSTreeNode { in原创 2016-04-24 20:07:55 · 471 阅读 · 0 评论 -
快速排序递归与非递归代码实现与思考
有的时候也是不知道是为什么,就像高中数学王老师说的那样,熟能生巧,不理解的要学会接受,慢慢就会理解了。大二的时候进行数据结构课程设计,我选做的一个是将快速排序的递归程序修改成非递归的形式,我记得我当时修改了好久好几,总是觉得这个非递归不能办到,但是当时根本没有想到用栈的思想,现在又重新学习数据结构,知道了递归与栈之间的关系。在剑指offer这本书中读到递归的本质就是栈结构,所以将递归函数拆成非递归的原创 2016-05-30 17:11:44 · 633 阅读 · 0 评论 -
关于回文的解体以及解题方法
牛客网网上的一道腾讯的题目,题目如下:给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.输出描述:对于每组数据,输出一个整数,代表最少需要删除的字符个数。输入例子: abcda google输出例子: 2 2 。 简单的大原创 2016-05-30 00:04:23 · 476 阅读 · 0 评论 -
i++与++i的区别--读书笔记
还记得大一的时候C语言老师说,现阶段,你们只需要记住前置++与后置++的区别就是在赋值的时候会有区别,其他的时候没有区别。他说的这句话在考试的时候百用不错。可是现在的阶段用这句话就不够用了,我查了 more effective C++把自己的一些体会记录下来。首先先贴上书上的代码自己用眼瞅一眼: 看到这段代码之后就会立刻明白前缀与后缀的不同: 1.返回值不同,前缀返回的是引原创 2016-05-11 16:41:48 · 268 阅读 · 0 评论 -
more effective C++的读书笔记 ——不要重载&&和||
在more effective C++中告诉我们不要重载&&和||。原因如下 1.重载&&或者||可能会违反短路计算法 2.重载是一个函数,而函数中没有告诉我们先要计算哪个参数,也是违背短路计算发。原创 2016-05-11 17:22:12 · 276 阅读 · 0 评论 -
直接插入排序思考与代码实现
在直接插入排序中,在严蔚敏的书中说是需要设置哨兵,哨兵的作用是避免数组出界,所以在第一个位置设置哨兵,在经过思考这算法对我来说最值得学习的地方就是在比较的同时移动位置,这样会减少时间复杂度 void SIS(sqList &L,int len) { //这里有非常值得学习的地方,那就是在比较的同时直接进行移动 //这个是有哨兵的 if(len<=1) return;原创 2016-05-09 17:32:15 · 965 阅读 · 1 评论 -
数组中的逆序对
求数组中的逆序对实际上有两种方法第一种直接暴力解决,两次循环,搞定,但是时间复杂度较高o(n^2), 另一种方法就是利用归并排序的方法,时间复杂度也就是归并排序的时间复杂度是O(N*lnN)时间紧迫直接上代码:#include <iostream>;using namespace std;int InversePairsCore(int*arr,int start,int end,int*co原创 2016-09-17 14:25:07 · 497 阅读 · 0 评论