数据结构与算法
zy20150613
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
常见的排序算法
关于常用的排序算法有:插入排序:直接插入排序、希尔排序选择排序:直接选择排序、堆排序交换排序:冒泡排序、快速排序(4种逐渐优化)归并排序:归并排序一下分别给出以上方法具体代码,并且堆快速排序做出几种优化:(1)子区间优化方法,即可以在最后几层也就是区间不大情况下,直接选择插入排序消耗更少(2)取key关键字用三数取中的方法,保证它既不是最大也不是最小,提高效率(原创 2018-01-22 15:00:46 · 230 阅读 · 0 评论 -
常见C++面试题总结(六)
常见的str函数:strtok extern char *strtok( char *s, const char *delim ); 功能:分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串。 说明:strtok()用来将字符串分割成一个个片段。当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为 \0 字符。在第一次调用时,s...原创 2019-02-27 10:45:27 · 369 阅读 · 0 评论 -
常见C++笔试面试题总结(五)
21. New delete 与mallocfree 的联系与区别?答案:都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造函数。delete 会调用对象的destructor,而free 不会调用对象的destructor.(可以看看:显式调用构造函数和析构函数)22. #define DOUBLE(x)...原创 2019-02-27 10:40:04 · 376 阅读 · 0 评论 -
常见C++笔试面试总结(四)
11. 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy。答案:/*编写strcpy函数(10分)已知strcpy函数的原型是char *strcpy(char *strDest, const c...原创 2019-02-27 10:36:39 · 183 阅读 · 0 评论 -
常见C++笔试面试题总结(三)
1.求下面函数的返回值( 微软)int func(x) { int countx =0; while(x) { countx ++; x = x&(x-1); } return countx; }假定x = 9999。 答案:8思路:将x转化为2进制,看含有的1的个数。(华为面...原创 2019-02-27 10:33:34 · 445 阅读 · 0 评论 -
常见C++面试题及基本知识点总结(二)
8.tcp为什么要三次握手,tcp为什么可靠。为什么不能两次握手:(防止已失效的连接请求又传送到服务器端,因而产生错误)假设改为两次握手,client端发送的一个连接请求在服务器滞留了,这个连接请求是无效的,client已经是closed的状态了,而服务器认为client想要建立一个新的连接,于是向client发送确认报文段,而client端是closed状态,无论收到什么报文都会丢弃...原创 2019-02-27 10:28:25 · 356 阅读 · 0 评论 -
常见C++面试题及基本知识点总结(一)
1. 结构体和共同体的区别。定义:结构体struct:把不同类型的数据组合成一个整体,自定义类型。共同体union:使几个不同类型的变量共同占用一段内存。地址:struct和union都有内存对齐,结构体的内存布局依赖于CPU、操作系统、编译器及编译时的对齐选项。关于内存对齐,先让我们看四个重要的基本概念:1.数据类型自身的对齐值:对于char型数据,其自身对齐值为1...原创 2019-02-27 10:17:59 · 301 阅读 · 0 评论 -
链表面试题之链表分割
题目描述:编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。//分割链表,分成大于和小于x的两部分,且数据顺序不能改变// 输入:// 4 6 8 6 3 5 3 9 1 5 , x = 5// 输出:// 4 ...原创 2019-02-26 17:16:40 · 585 阅读 · 0 评论 -
链表面试题之合并两个有序单链表
题目描述:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4 解析:首先先取得小的结点作为头结点;然后拿到L1, L2中较小的结点进行尾插,直到其中一个链表遍历完并且插入完结束。最后将未...原创 2019-02-26 17:05:22 · 302 阅读 · 0 评论 -
链表面试题之输出链表中倒数第K个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。 解析:一种变形的快慢指针。首先将快指针向后移动K步,慢指针在head处不动。然后让快慢指针同时移动,直到快指针移动到最后一个结点,则慢指针所在位置就是倒数第K个结点。ListNode* FindKthToTail(ListNode* head, unsigned int k){ if (head == NULL ||...原创 2019-02-26 17:01:15 · 272 阅读 · 0 评论 -
链表面试题之给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点
题目:给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, a...原创 2019-02-26 16:57:58 · 760 阅读 · 0 评论 -
链表面试题之单链表逆置
题目:反转一个单链表链表结构如下:struct ListNode{ int val; struct ListNode *next;};方法一:算法思想:用三个指针 n1 , n2 , n3 起初,n1指向头head,n2指向第二个结点,n3指向第三个结点;先让n1的next指向空,循环判断n2是否为空,让n2头插到n1后面(n2->next = n1),再挪动指...原创 2019-02-26 16:55:32 · 373 阅读 · 0 评论 -
40亿的QQ账号上线下线,怎么找到一天内上线两次及以上的QQ号码?
腾讯某次面试题。如题,解决方案1:简单思路:在linux下利用命令进行查询,首先将上线QQ号码进行排序(sort),然后再去重(uniq -c),加-c选项是将重复次数输出到第一列中,然后再按重复次数进行选择,重复次数大于等于2次的,就是一天内上线两次的QQ号码。缺点:方案1中效率太差,40亿用户进行排序,时间空间耗费太大。不建议采纳。解决方案2:利用bitmap的思想,...原创 2019-03-23 17:08:10 · 1280 阅读 · 0 评论
分享