2013年8月12日
摘要: 题目:打印单向链表中倒数第k个节点以下为自己所写代码,未经过验证,只是写个思路。。。#include#include#includeusing namespace std;//节点定义struct ListNode{ int m_nValue; ListNode* m_pNext;};void FindKthToTail(ListNode* pHead, unsigned int k){ if(pHead == NULL) throw new std::exception("Invalid parameters!"); std::vector Values... 阅读全文
posted @ 2013-08-12 10:15 -赶鸭子上架- 阅读(192) 评论(0) 推荐(0) 编辑
  2013年8月11日
摘要: 按照作者的说法,作为应届毕业生的我来说,如果能写出初级程序员的参考代码来解决面试题14就可认为过关了。。。参考代码如下:void ReorderOddEven_1(int *pData, unsigned int length){ if(pData == NULL || length == 0) return; int *pBegin = pData; int *pEnd = pData + length - 1; while(pBegin < pEnd) { // 向后移动pBegin,直到它指向偶数 while(pBe... 阅读全文
posted @ 2013-08-11 21:31 -赶鸭子上架- 阅读(224) 评论(0) 推荐(0) 编辑
摘要: #include "stdafx.h"#include using namespace std;//调整数组顺序使奇数位于偶数前void OddEvenSeparated(int* array, int length){ int indexfront = 0; int indexback = length - 1; bool bFinshed = false; while(indexfront 质量了。。。 阅读全文
posted @ 2013-08-11 18:14 -赶鸭子上架- 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 题目:以O(1)的时间复杂度删除单链表中的某个节点自己所写代码如下://以O(1)时间删除链表节点//要求:单向链表,头指针,待删节点指针//链表节点struct ListNode{ int m_nValue; ListNode* m_pNext;};//O(n)的解法:从头遍历,找到pToBeDeleted所指节点的前一个节点再进行删除void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted){ if(pListHead == NULL || *pListHead == NULL || pToBeDeleted... 阅读全文
posted @ 2013-08-11 16:13 -赶鸭子上架- 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 题目:打印从1~最大的n位数分析:知道陷阱在哪,即n很大时若用通常的int,long会溢出;想到用字符串解决,这涉及到字符转数字及反过来。 刚开始纠结于字符串怎么加1,想了片刻,觉得应该取出最后一位上的字符,转成数字+1再转成字符,但这就出现个问题:'9'加1后得到'10',这会产生进位。。。 到这思维就乱了。。。1、不断向前进位怎么解决?2、怎么判断到达最大值?在看过作者的代码后才豁然开朗。。。,解决方案:1、将进位与不进位分开,并且进位时设定nTakeOver用于下一字符的加,该过程用循环完成;2、同样判断最大值时,若第一位的数值=10了,那肯定已经到达最大 阅读全文
posted @ 2013-08-11 09:50 -赶鸭子上架- 阅读(540) 评论(0) 推荐(1) 编辑
  2013年8月10日
摘要: 题目:求数值的整数次方,不考虑大数值情况 即实现函数:double Power(double base, int exponent)自己所写代码如下:#include "stdafx.h"#include double Power(double base, int exponent);int main(int argc, char* argv[]){ double base = -1; int exponent = 0; try { std::coutbool g_InvalidInput = false;bool equal(double num1, ... 阅读全文
posted @ 2013-08-10 22:01 -赶鸭子上架- 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 1、程序中变量/函数命名规则: 尽量用英文单词组合来对变量/函数进行命名,通俗易懂!2、代码完整性: 1、普通功能测试;2、边界测试(包括循环、递归终止条件);3、负面测试。3、对错误的3种处理方式: 1、由返回值告知错误(类似Windows API);2、出错误时,设置全局变量;3、异常处理 各方式优缺点如下: 阅读全文
posted @ 2013-08-10 15:59 -赶鸭子上架- 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 题目一:判断一个整数是不是2的n次幂实现大概如下:int main(){ int a = 256; if((a&(a-1)) == 0) //重要!! std::cout<<"YES!"<<std::endl; else std::cout<<"No!"<<std::endl; return 0;}题目二:输入整数m和n,计算由m得到n时需改变二进制位的个数。思路:先m|n(异或);再用上篇博客中的方法统计异或结果二进制中1的个数即可。重点理解+记住:一个整数(包括负数)减一后再与原来的整数做位与( 阅读全文
posted @ 2013-08-10 12:13 -赶鸭子上架- 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 题目:求整数二进制表示中1的个数。分析:此题直接考查二进制表示与位运算!!! 正数和负数的二进制表示不同!在计算机中,正数的二进制表示即为通常所写的二进制;而负数的二进制表示则用补码表示,即原码的反码再+1。 比如:1) 9:在32位计算机中表示为(十六进制)0x00000009 (其原码=反码=补码=0x00000009); 2) -9:在32位计算机中表示为(十六进制)0xFFFFFFF7,原因:-9的原码=0x00000009,-9的反码=0xFFFFFFF6,-9的补码=0xFFFFFFF7 所以,-9的二进制表示中1的个数为31 ! 另外,拿8位二进... 阅读全文
posted @ 2013-08-10 10:49 -赶鸭子上架- 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 位运算是对二进制表示的一种运算,个人理解:由于位运算更接近于底层结构,所以运算更快、效率更高!共有5种位运算操作符:与(&),或(|),异或(^),左移(>)。操作实例如下:注意:右移 有符号数时,根据有符号数的最高位符号来添加右移时所空出的各位! 阅读全文
posted @ 2013-08-10 09:40 -赶鸭子上架- 阅读(274) 评论(0) 推荐(0) 编辑