
技巧题
patkritLee
practice makes perfect.
展开
-
常见排序算法的稳定性
堆排序、快速排序、希尔排序、直接选择排序 不是稳定的排序。基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。首先,排序算法的稳定性,通俗的讲就是能保证排序前2个相等的数在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。那么,稳定性的好处在哪里呢。排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。原创 2016-09-21 21:37:42 · 440 阅读 · 0 评论 -
n从1开始,每一个可以选择对n加1或者对n加倍,若想获得整数2013,最少需要多少个操作
n从1开始,每一个可以选择对n加1或者对n加倍,若想获得整数2013,最少需要多少个操作。这里给出一种解答:2013=2*1006+1 (2次)1006=503*2 (1次)503 = 251*2+1 (2次)125=62*2+1 (2次)31=15*2+1 (2次)15=7*2+1 (2次)7=3*2+1原创 2016-09-21 21:16:42 · 10267 阅读 · 2 评论 -
赛马问题
36匹马分6个跑道用最快的方法找出跑的最快的6匹马,最少需要比赛几次。36匹马分6个组,分别为A、B、C、D、E、F组.第一轮,每个组各跑一次,取每组前三名,标识为A1、A2、A3,B1、B2、B3,以此类推.第二轮,每个组的第一名(A1——F1)拉出来跑一次,假设名次是:A1第一名,B1第二名,C1第三名.则:1.后三名及其所在组的其余组员均被淘汰(小组头名都没能进前原创 2016-09-04 22:01:36 · 484 阅读 · 0 评论 -
负数取模运算问题
今天做一个笔试题,遇到了负数取模运算,做一个总结。我们平常遇到的除法取余,很少涉及负数。 那么对于负数取余,一共只有三种情况。12%(-5)=2 因为商是-2,所以余数是 2(-12)%(-5)=-2 因为商是2,所以余数是 -2(-12)%5 = -2 因为商是-2,所以余数是 -2因为商好定,有了商就可计算机出余数。所以:取余的结果正负号 跟被除数总是一致原创 2016-09-02 10:04:31 · 3028 阅读 · 0 评论 -
数字填空题
解析:16=2^4;27=3^3;16=4^2;5=5^1;1=6^0;所以选B解析:150+3^1=153 170+3^2=179 200+3^3=227 240+3^4=321 290+3^5=533 350+3^6=1079原创 2016-08-28 13:41:15 · 1152 阅读 · 0 评论 -
关于strcpy()的一些小问题
int func(){char b[2]={0};strcpy(b,"aaaa");} 以下说法哪个正确( )A. Debug版崩溃,Release版正常B. Debug版正常,Release版崩溃C. Debug版崩溃,Release版崩溃D. Debug版正常,Release版正常解析:ADebug中有assert宏,所以会崩溃;原创 2016-08-28 13:37:08 · 822 阅读 · 0 评论 -
拿球问题,必胜策略
题目:100个球,两人拿,一次1-5个,甲必胜的策略思路:100/6=16余4,那么策略为 甲先拿4个球,然后当乙拿了x个球,甲拿6-x即可,最后不管乙拿了多少个,甲都能保证一次性拿完。题目:100个球,两人拿,一次不超过4个,甲必胜策略思路:100/5=25余0那么策略为甲先拿0个...原创 2016-08-08 19:57:05 · 5122 阅读 · 0 评论 -
面试题总结
百度一面:1. 字符串的反转2. 从一个给定文件中找出给定字符出现的次数3. 数据库,从一个table表中找出字段名为test1且不为test2的所有数据4. ...忘记了 T T二面:1.一个很大的日志关机记录百度 登录的那些ip以及时间,让你统计出现次数前100个的ip2.关于 微信 发一个消息 这个场景 你能想出那些测试的案例 三面:原创 2016-03-10 08:57:01 · 578 阅读 · 0 评论 -
关于const做函数返回值的 一个解释
我们看一个例子:char *strA(){ char str[] = "helloworld"; return str;}int _tmain(int argc, _TCHAR* argv[]){ strA(); return 0;}解析:这个str里存的地址是函数strA栈帧里"hello world"的首地址。函数调用完成,栈帧恢复到调用strA之前的状态,临时空间转载 2016-02-26 09:08:12 · 779 阅读 · 0 评论 -
指针与引用的区别
(1)非空区别:在任何情况下都不能使用指向空值的引用。 一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空置给该变量。相反,如果你变量肯定指向一个对象,假如你的设计不允许变量为空,这时你就可以将变量声明为引用。不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针更高。(2原创 2016-02-25 21:58:58 · 512 阅读 · 0 评论 -
两个整数型,不准用while、if、for、switch等判断语句 求出两者最大值
题解:可以用bool类型来判断// testfloattoint.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;bool flag(int p,int q){ return p < q;}int maxi(int a,int b){ bool f = flag(a, b);//原创 2016-02-25 19:11:12 · 650 阅读 · 0 评论 -
有两个变量a和b,不用if等判断语句,求两者较大的值
题解:max=(a+b+abs(a-b))/2原创 2016-02-25 18:59:37 · 679 阅读 · 0 评论 -
判断一个数是否是2^N次方
要求不能使用 循环。。。题解:首先我们知道2的N次方 这个数 的二进制 肯定是10000....这种形式,而且只带一个1,低位全是0,那么我们就可以用这个数减去1,得到的二进制是011111...再将他俩取逻辑与 得到的结果必定是0,所以用X&(X-1)是否为0 来判断。。原创 2016-02-25 18:41:16 · 431 阅读 · 0 评论 -
堆和栈的区别
堆和栈的区别: 一、堆栈空间分配区别: 1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈; 2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。 二、堆栈缓存方式区别: 1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放转载 2016-02-24 22:06:45 · 337 阅读 · 0 评论 -
如何判断单链表是否出现环
如何判断链表中有无环 单向链表中有环的话,如果我们对此链表进行遍历,则将无穷尽。因此有必要判断一个单向链表是否有环。假如一个单向链表中存在环,如下图:(一个小矩形代表链表中的一个节点)虚线箭头代表中间有无数节点。 先说算法,然后再来证明算法的正确性。 以下算法可以判断一个单向链表中是否有环(不讨论详细数据结构,只简要说明。设结点的next域为指向下一结点的指针)转载 2016-02-24 21:58:03 · 507 阅读 · 0 评论 -
不使用临时变量 交换两个数
假设两个数x和y,则有:方法1,算术运算(加减):x=x+y; //x暂存两数之和y=x-y; //y为两数之和减去y,即原来的xx=x-y; //x为两数之和减去现在的y(原来的x),变成原来的y方法2,逻辑运算(异或):x^=y;//x转载 2016-02-24 21:45:12 · 424 阅读 · 0 评论