
撸题之旅
xiaofenzhao
这个作者很懒,什么都没留下…
展开
-
单例模式(饿汉+懒汉)详细代码
单例模式:单例模式有两种实现方式:饿汉模式:就是说不管你将来用不用,程序启动时就创建一个唯一的实例对象class Singleton{public:static Singleton* GetInstance(){ return &m_instance;}private:// 构造函数私有 Singleton(){};// C++98 防拷贝 Singleton(Singleton const&); Singleton& operator=(Singlet原创 2020-06-12 11:23:55 · 712 阅读 · 0 评论 -
8大排序算法(超详细,算法步骤+代码)
排序的分类按照排序过程中所依据的原则的不同可以分类为:►插入排序:直接插入排序 希尔排序►交换排序:冒泡排序 快速排序►选择排序:简单选择排序 堆排序►归并排序►基数排序排序算法比较从平均情况看:堆排序、归并排序、快速排序胜过希尔排序。从最好情况看:冒泡排序和直接插入排序更胜一筹。从最差情况看:堆排序和归并排序强过快速排序。虽然直接插入排序和冒泡排序速度比较慢,但是当初始序列整体或局部有序是,这两种算法的效率比较高。当初始序列整体或局部有序时,快速排序算法效率会下降。当排.原创 2020-06-12 11:19:42 · 2551 阅读 · 1 评论 -
在整型有序数组中查找想要的数字
要求:写代码可以在整型有序数组中查找想要的数字, 找到了返回下标,找不到返回-1.(折半查找)思路:折半查找可以缩小查找的范围,提高查找的效率,首先将区间一分为2,比较待查找的数与中间数的大小关系,若待查找的数比中间数大的话,就在后一部分查找,若待查找的数比中间数小的话,就在前一部分查找,//int binsearch(int a[], int size, int goal)//{// ...原创 2019-03-05 09:04:25 · 459 阅读 · 0 评论 -
编写代码模拟三次密码输入的场景
要求:编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输入,最多输入三次。三次均错,则提示退出程序。思路:主要是字符串的比较,字符串比较不能直接用“==”,应该用“strcmp”//int main()//{//// char*password = "abcde";// char input[1024] = { 0 };// in...原创 2019-03-05 09:11:54 · 267 阅读 · 0 评论 -
编写一个程序,可以一直接收键盘字符
要求:编写一个程序,可以一直接收键盘字符, 如果是小写字符就输出对应的大写字符, 如果接收的是大写字符,就输出对应的小写字符, 如果是数字不输出。 `思路:如果记不住大小写字母之间相差32的话,可以直接写?‘a’-'A’哦//int main()//{// int num;// printf("请输入字符:");// while ((num = getchar()) != EOF)/...原创 2019-03-05 09:16:41 · 398 阅读 · 0 评论 -
写一个函数返回参数二进制中 1 的个数
要求:写一个函数返回参数二进制中 1 的个数 比如: 15 0000 1111 4 个 1程序原型:int count_one_bits(unsigned int value){// 返回 1的位数}思路:看到这样的题目,你首先 想到的是什么?小奋我(以后称自己为小奋,不喜勿喷哦 笑cry),我首先想到的当然是把它化为二进制的,那么如何把一个数改成二进制的形式呢?我们知道那就是不断的%...原创 2019-03-05 09:36:45 · 344 阅读 · 0 评论 -
获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列
要求:获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。//int main()//{// int date = 0;// printf("请输入数字:");// scanf("%d", &date);// int a[32];// int i = 0;// for (i = 0; i < 32; i++)// {// a[i] = date %...原创 2019-03-05 09:59:00 · 214 阅读 · 0 评论 -
编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
要求:编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?输入例子:1999 2299输出例子:7 思路:如果你想到了用异或的方法,那么这道题目就成功了一大半啦,异或具体是指,相同为0,不同为1.一个数右移一位代表除2,左移一位代表乘2//int Different_Bin(int value1, int value2)//{// int i;// ...原创 2019-03-05 10:07:28 · 364 阅读 · 0 评论 -
.不使用(a+b)/2这种方式,求两个数的平均值。
要求:不使用(a+b)/2这种方式,求两个数的平均值。思路:这种方法十分的简便,短短的几行代码就可搞定,我们知道右移一位相当于除2,所有这里采用移位操作的方式代替除法运算//int main()//{// int a=10;// int b=20;// printf("%d", (a + b) >> 1);// system("pause");// return 0;...原创 2019-03-05 11:00:08 · 465 阅读 · 0 评论 -
编程实现: 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)
要求:编程实现:一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)思路:这里也采用异或的方法,如果数组中的数与其他任意一个数异或为0的话,就说明还有与这个数相同的数,相反,如果与剩下任意数异或结果为1的话,就说明这个数只出现了一次。//int main()//{// int arr[5] = { 1, 5, 1, 2, 2 };// int ...原创 2020-06-12 11:05:16 · 295 阅读 · 0 评论 -
编写函数:这个函数的返回值value的二进制位模式从左到右翻转后的值。
要求:编写函数:unsigned int reverse_bit(unsigned int value);这个函数的返回值value的二进制位模式从左到右翻转后的值。//如://在32位机器上25这个值包含下列各位://00000000000000000000000000011001//翻转后:(2550136832)//1001100000000000000000000000000...原创 2019-03-09 18:15:26 · 253 阅读 · 0 评论 -
编程实现: 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)
要求:编程实现:一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。//int main()//{// int arr[5] = { 1, 5, 1, 2, 2 };// int ret = arr[0];// printf("arr = %d ", arr[0]);// int i = 0;// for (i = 1; i < 5; i++)...原创 2019-03-09 18:49:03 · 191 阅读 · 0 评论 -
调整数组使奇数全部都位于偶数前面。
要求:调整数组使奇数全部都位于偶数前面。题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。解析:重点是一个从左向右和从右向左的过程。找偶数的时候从右往左找,找奇数的时候从左往右找。为什么是这样的顺序呢?。。。。其实很简单啦//void Adjust_Num(int Arr[],int size)//{/...原创 2019-03-09 19:14:28 · 265 阅读 · 0 评论 -
杨氏矩阵
要求://杨氏矩阵有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在。时间复杂度小于O(N);数组:1 2 32 3 43 4 51 3 42 4 54 5 61 2 34 5 67 8 9杨氏矩阵,是对组合表示理论和舒伯特演算很有用的工具。它提供了一种方便的方式来描述对称和一般线性群的群表示,并研究它们的性质。有一个...原创 2019-03-09 19:27:52 · 316 阅读 · 0 评论 -
判断一个字符串是否为另外一个字符串旋转之后的字符串。
要求:判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAAAABCD右旋一个字符得到DAABC//int Is_Twostr(char* str1, char* str2,int size1,int size2)...原创 2019-03-09 19:45:06 · 159 阅读 · 0 评论 -
一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字
要求:一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。找出这两个数字,编程实现。//void find_num(int arr[], int len)//{// int i = 0;//循环变量// int ret = 0;//记录所有值异或的结果// int pos = 0;//记录ret二进制为第一个为1的位置// int x = 0;//将一组值异或在x,得到1个...原创 2019-03-09 19:58:17 · 644 阅读 · 0 评论 -
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水, 给20元,可以多少汽水。
要求:喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水, 给20元,可以多少汽水。编程实现。解析:有一点需要注意的是,开始单余了一个空瓶,后来最后那瓶水喝完之后,又空出一个空瓶,和开始的那个空瓶又可以换一瓶水,我开始的时候,就忽略了这一点,所以sum就需要再加上1//int main()//{// int money = 20;// int sum=0;// money ;// whi...原创 2019-03-09 20:06:17 · 929 阅读 · 0 评论 -
链表的基本操作(增删改查)超详细
什么是链表?链表是一种物理存储上非连续、非顺序的存储结构。数据元素的逻辑顺序是通过链表中的指针链接次序实现的。就好比是班里的同学的学号、每个同学上课所坐的位置坑都不是固定的,但是通过他们之间学号的连续性,通过1号可以找到2号同学,链表就是这样,不仅存储了数值,还存储着下一个元素的地址链表的基本操作有:初始化、销毁、增、删、改、查首先给出链表结构体:typedef struct Node{...原创 2019-05-02 11:28:08 · 3971 阅读 · 0 评论 -
链表相关面试题(详细注释)LeetCode亲测无误
1、合并两个有序链表/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode*...原创 2019-05-03 13:03:02 · 135 阅读 · 0 评论 -
快慢指针及其应用(详细注释,适合程序小白)
什么是快慢指针?形象的说,如上图所示,假设有两个小人,分别以2m/s和1m/s的速度,在赛道上奔跑,那么当黄色小人到达终点的时候,蓝色小人正好在中间的位置。不考虑其他因素的影响,那么黄色小人就是快指针,蓝色小人就是慢指针。那么快慢指针究竟有什么作用呢?来看一道题。给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入...原创 2019-05-03 13:21:09 · 505 阅读 · 0 评论 -
双指针遍历(输出链表中倒数第k个结点)
题目:输入一个链表,输出该链表中倒数第k个结点。那么这道题该从何入手,其实这道题考察的是双指针遍历,但是这个可不是快慢指针。相当于一个现实中的例子。比如说,两个人同时行走,以相同的速度,但是甲在乙前方5m处,那么当甲走到终点的时候,乙在哪,当然是在甲后方5m处。过度到题目中来,如果让前指针先走k步,那么当它走到终点的时候,乙在哪,是不是刚好在倒数第5个的位置。如果你还不明白的话,可以参考下图。...原创 2019-05-03 14:22:33 · 316 阅读 · 0 评论 -
删除链表中的重复结点(牛客网亲测无误)
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 ListNode* deleteDuplication(ListNode* pHead) { if(pHead==NULL) { ...原创 2019-05-03 15:56:56 · 200 阅读 · 0 评论 -
相交链表(详细步骤--解题思路)
题目描述:编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8...原创 2019-05-03 17:38:37 · 371 阅读 · 0 评论 -
复杂链表的复制(带随机结点)
题目描述:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。深拷贝:深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。举个例子,一个人名叫张三,后来用他克隆(假设法律允许)了另外一 个人,叫李四,不管是张三缺胳膊少腿还是李四缺胳膊少腿都不会影响另外一个人。(来自百度百科)所以说,拷贝完不...原创 2019-05-08 15:49:35 · 196 阅读 · 0 评论 -
栈实现队列(leetcode亲测)
关于栈和队列的概念,相信大家都已经知道了,我这里就不在赘述了,如果还有不明白的小伙伴们可以看看我的上一篇博客,里边有介绍哦。如何用栈实现队列呢?当然一个栈是不够的,请看下图:定义两个栈,左边的栈为压入栈,首先数据进入到左边的栈,然后再将数据弹出压入到右边的栈,在将右边的栈中元素弹出,这样就达到了栈的 功能。下边贴出代码:class MyQueue {public: stack&...原创 2019-05-08 16:48:16 · 189 阅读 · 0 评论 -
最小栈的实现
什么是最小栈?就是说,把一组数据压入栈后,每次弹出的都是栈中最小的那个数据。怎么实现呢?思路:可以用两个栈实现,一个栈中压入数据,然后把最小的数据存放在另外一个栈中入下图所示。其中需要用到的函数接口如上图左边所示。数据压入左栈后,如果右栈中此时没有数据,直接把左栈中的数弹出后再压入到右栈。再次压入右栈的数据就需要跟栈顶的的元素大小进行比较,如果小于等于栈顶元素时才压入,,这样出栈的时...原创 2019-05-09 13:13:09 · 171 阅读 · 0 评论 -
二叉树的前序、中序、后序(相关面试题)
二叉树代码的核心是递归算法。递归算法1、需要终止条件2、需要递推公式二叉树的遍历有3种形式,前序、中序、后序前序:根–》左–》右中序:左–》根–》右后序:左–》右–》根代码很简单这里就不贴了,有需要的小伙伴评论下留言哦下面说下二叉树相关题目1、求结点个数代码如下int countNodes(TreeNode* root) { if(root==NULL) ...原创 2019-05-09 14:28:49 · 884 阅读 · 0 评论 -
c++内存管理常见面试题
1、malloc/free和new/delete的区别malloc和free和new/delete的共同点是:都是从堆上申请空间的,并且需要用户手动释放。不同点:1、malloc和free是函数,new和delete是操作符2、malloc申请的 空间不会被初始化,new可以初始化3、malloc申请空间时,需要手动计算空间大小并传递,new只需在后跟上空间的类型即可4、malloc返...原创 2019-05-30 10:48:18 · 460 阅读 · 0 评论 -
用两个栈实现一个队列(c++)
从今天开始正式进入撸题之旅啊,想想不免觉得头有点疼,不过没办法啊,下次找工作就轮到我了,希望与各位小伙伴们互相激励把。本人比较low,欢迎指点迷津。用两个栈实现一个队列,其实思路比较容易,首先我们需要知道栈和队列的特性。栈:先进后出队列:先进先出用一幅图来看就比较明显了绿色的表示栈1,红色的表示栈2现在我们来看,如果将要进栈的数据是abc,如果是一个栈的话那么出栈的顺序肯定就是cba...原创 2019-12-12 15:47:39 · 306 阅读 · 0 评论