每日一题
hj605635529
海阔任鱼跃,天高任鸟飞!!
展开
-
day01之合并两个有序链表+实现1+2+3...+n要求不能使用乘除法循环条件判断等
合并两个有序链表,合并以后的链表依旧有序。递归写法和非递归写法实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。(这个题有多种解法,大家可以尽量去思考,这个题最优的解法时间复杂度是O(1) 构造函数写法,虚函数写法,逻辑或短路规则原创 2017-07-15 11:01:47 · 295 阅读 · 0 评论 -
day19之找出最喜欢吃的前k种水果(数组中次数出现最多的前k个数)
本公司现在要给公司员工发波福利,在员工工作时间会提供大量的水果供员工补充营养。由于水果种类比较多,但是却又不知道哪种水果比较受欢迎,然后公司就让每个员工报告了自己最爱吃的k种水果,并且告知已经将所有员工喜欢吃的水果存储于一个数组中。然后让我们统计出所有水果出现的次数,并且求出大家最喜欢吃的前k种水果。 分析:一看这题就是典型的求数组中出现次数最多的前k个数, 首先我们应该用哈希表或map先统计元素原创 2017-08-02 02:00:14 · 494 阅读 · 0 评论 -
day12之判断一棵二叉树是否是平衡二叉树+求一颗二叉树的镜像+判断一个数在二维数组中是否存在
判断一棵二叉树是否是平衡二叉树struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};//方式一:求每个节点的左右子树的高度,判断是原创 2017-07-25 01:45:31 · 795 阅读 · 0 评论 -
day02逆置/反转单链表+查找单链表的倒数第k个节点+实现一个Add函数不用四则运算
-逆置/反转单链表查找单链表的倒数第k个节点,要求只能遍历一次链表 --实现一个Add函数,让两个数相加,但是不能使用+、-、*、/等四则运算符。ps:也不能用++、--等等原创 2017-07-15 10:50:18 · 425 阅读 · 0 评论 -
day13之二叉树的前中后序遍历非递归+两个链表求差集
实现二叉树的前序/中序/后序非递归遍历。已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。 链表结点的结构类型定义如下: struct node { int elem; node* next;原创 2017-07-26 15:23:12 · 314 阅读 · 0 评论 -
day14之判断一个节点是否在一棵二叉树中+判断一颗二叉树是是否是另一颗树的子树
判断一个节点是否在一棵二叉树中struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};判断一棵树是不是另一颗树的子树。原创 2017-07-26 17:29:33 · 1365 阅读 · 0 评论 -
day21桶排序一个无序数组+求一个无序数组中的中位数
int a[] = {12,13,12,13,19,18,15,12,15,16,17},要求对数组a进行排序,要求时间复杂度为O(N) void BucketSort(int array[], int size){ assert(array && size > 0); int max = array[0]; int min = array[0]; for(int i原创 2017-08-04 00:36:37 · 579 阅读 · 0 评论 -
day15之判断一棵树是不是完全二叉树
1.完全二叉树的定义? 判断一棵树是否是完全二叉树,首先要知道什仫是完全二叉树?完全二叉树就是除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。 2、如何判断一棵树是完全二叉树? 两种判断完全二叉树的方法: 1)标记法: 设置标记flag=false,如上图所示,从根结点开始层序遍历入队列,如果队列不为空,一直循环。遇到第一个没有左孩子或者右孩子的结点,设原创 2017-07-27 18:04:39 · 749 阅读 · 1 评论 -
day15之求二叉树中两个节点的最近公共祖先
求二叉树两个节点的最近公共祖先:1:二叉树每个节点有parent(三叉链) 2:二叉树是搜索二叉树。 3:就是普通二叉树。(尽可能实现时间复杂度为O(N))原创 2017-07-27 18:19:11 · 574 阅读 · 0 评论 -
day23之数组循环右移k位+去除重复的字符。
将N个字符的数组,循环右移K位。时间复杂度O(N)。 #include<iostream>using namespace std;#include<cassert>#include<string.h>void Reverse(char *array, int left, int right){ while(left < right) { swap(array[原创 2017-08-05 23:35:32 · 289 阅读 · 0 评论 -
day24之位图的实现和位图的应用
定义位图法就是bitmap的缩写。所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。例如,要判断一千万个人的状态,每个人只有两种状态:男人,女人,可以用0,1表示。那么就可以开一个int数组,一个int有32个位,就可以表示32个人。操作的时候可以使用位操作。 位图实现unsigned int bit[N];在这个数组里面原创 2017-08-06 00:15:59 · 324 阅读 · 0 评论 -
day25之布隆过滤器的实现和优缺点以及扩展
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。代码实现://bitMap.h布隆过滤器存在是准确的还是不存在是准确的? 2:布隆过滤器优缺点? 3:如何扩展BloomFilter使得它支持删除元素的操作?请设原创 2017-08-08 13:50:02 · 607 阅读 · 0 评论 -
day26之模拟实现memcpy和memmove函数
【基础题】--模拟实现C库的memcpy和memmove。 2.【附加题】--给两个文件,分别有100亿个URL,我们只有1G内存,如何找到两个文件交集?分别给出精确算法和近似算法。(设计出解决方案)原创 2017-08-08 12:17:53 · 346 阅读 · 0 评论 -
day11之求二叉树的高度+销毁一颗二叉树+链表每K个节点之间逆序
求二叉树的高度链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现Node* RotateList(Node* list, size_t k). 提示:这个题是链表逆置的升级变型原创 2017-07-23 23:08:33 · 275 阅读 · 0 评论 -
day03之判断链表带环以及求环的长度及环的入口点+一个类不能被继承及只能分别在栈堆上创建对象
判断链表是否带环?若带环求环的长度?若带环求环的入口点?struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL) { }};.设计一个类不能被继承 2.设计一个类只能在堆上创建对象。 3.设计一个类只能在栈上创建对象。原创 2017-07-16 10:04:05 · 329 阅读 · 0 评论 -
day04之链表不带环相交+带环相交问题+fork函数输出几个短线
判断两个链表是否相交,若相交,求交点。(假设链表不带环)--1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】 2.【附加题】--请问下面的程序一共输出多少个“-”?原创 2017-07-17 00:50:17 · 291 阅读 · 0 评论 -
day08之元素出栈、入栈顺序的合法性+计算一个整数二进制位中1的个数
元素出栈、入栈顺序的合法性 如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),则合法。入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1),则不合法。 bool IsPopOrder(vector<int> pushV,vector<int> popV) { if(pushV.size() != popV.size()) return原创 2017-07-20 23:51:57 · 283 阅读 · 0 评论 -
day17之将二叉搜索树转换成一个排序的双向链表
题目: 输入一棵二叉搜索树,将该二叉搜索树转换为一个排序的双向链表。要求不能创建任何新的节点,只能调整树中指针的指向。 分析与解法: 1、由于要求链表是有序的,可以借助二叉树中序遍历,因为中序遍历算法的特点就是从小到大访问结点。当遍历访问到根结点时,假设根结点的左侧已经处理好,只需将根结点与上次访问的最近结点(左子树中最大值结点)的指针连接好即可。进而更新当前链表的最后一个结点指针。原创 2017-07-30 01:53:02 · 356 阅读 · 0 评论 -
day09之N的阶乘N!末尾有多少个0 + 二叉树的层序遍历
给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0 思路:看到这题我们直观的思路就是先求出N!,再判断N!末尾有多少个0,但是这有个问题,当N 很大的时候,会溢出,所以这种思路只能计算N很小的情况。int ZeroOfNum(int num){ assert(num > 0); int i = 1; long l原创 2017-07-21 11:08:57 · 339 阅读 · 0 评论 -
day05删除一个无头单链表的非尾节点 +从尾到头打印单链表+复杂链表的复制
1.删除一个无头单链表的非尾节点,时间复杂度为O(1)2.从尾到头打印单链表 【附加题】--复杂链表的复制。一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。原创 2017-07-17 23:39:46 · 308 阅读 · 0 评论 -
day10之求二叉树叶子节点的个数+求二叉树第k层的节点个数+数组中超过一半的数字
求二叉树叶子节点的个数`struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };数组中超过一半的数字{ if(原创 2017-07-22 15:03:33 · 342 阅读 · 0 评论 -
day06使用两个栈实现一个队列+使用两个队列实现一个栈+字符串空格替换
1.【基础题】--1.使用两个栈实现一个队列+使用两个队列实现一个栈 ps:两个题几乎是一样的思路,所以放一起了 2.【附加题】--替换字符串中的空格为$$$。要求时间复杂度为O(N) 例如:将"talk is cheap show me the code"替换。为"talk$$$is$$$cheap$$$show$$$me$$$the$$$code"。原创 2017-07-18 23:41:32 · 261 阅读 · 0 评论 -
day07之包含min函数的栈+查找一个字符串中第一个只出现两次的字符
实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1) class Stack{ public: void Push(int val) { s.push(val); if(minstack.empty()) {原创 2017-07-19 13:22:28 · 246 阅读 · 0 评论 -
day18之用shell脚本实现一个希尔排序
#!/bin/bashfunction ShellSort(){ echo "输入数组的长度" read size for((i=0; i<size; ++i)) do echo "输入第$((i+1))个元素" read array[i] done echo "${array[@]}" #array=(34 87原创 2017-07-31 13:01:27 · 410 阅读 · 0 评论 -
day16剑指offer---重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输出的前序遍历和中序遍历的结果都不含有重复的数字。前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5二叉树节点的定义如下:struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeN原创 2017-07-28 23:31:04 · 251 阅读 · 0 评论