这几天为了找工作开始看《剑指offer》,到现在也大概浏览一遍了,前两天看作者博客中提到九度OJ,就去看了一下,发现上面有书上的题目,就想可以自己写代码练习一下,而不仅仅是看解题思路,毕竟还是觉得写代码实在。可是现在却不想一道一道做了,知道怎么解决并且看过代码后忽然就没动力再去写了...唉...

  不过最后还是决定写点,写一点是一点吧,记录一下自己的代码。也许我一看要写50道题就有点害怕了,毕竟最近因为找工作的事情有点闹心,没法静下心来做事情,uva也暂时停止了,反正现在搞的挺乱的...

  好了,没用的话说也说了,说一下感受吧,浏览完这本书后留下印象最深的就是对空指针的判断,每一个涉及指针的操作都要先判断是否为NULL,以前我是从未考虑的,因为在oj上做题是不用考虑这个的,所以我几乎没这个习惯,看来以后要该改啦。收获一方面是解题思路,另一方面就是代码的鲁棒性了,给我上了很好的一堂课。的确,自己还有很多不足,还要好好努力...

@2013-09-26


  题3:二维数组中的查找。

 #include <cstdio>
#define MAXN 1000+10 int a[MAXN][MAXN]; int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
int m, n;
while (scanf("%d%d", &m, &n) != EOF)
{
int target;
scanf("%d", &target);
for (int i = ; i < m; i++)
for (int j = ; j < n; j++)
scanf("%d", &a[i][j]);
int x = , y = n-;
bool ok = false;
while (x < m && y >= )
{
if (a[x][y] == target)
{
ok = true;
break;
}
else if (a[x][y] > target) y--;
else x++;
}
if (ok) printf("Yes\n");
else printf("No\n");
}
return ;
}

Problem 3

  题4:替换空格。这种题拿到OJ上已经没意义了,可以直接拿来输出,要转换吗?...KISS...

 #include <cstdio>
#include <cstring> char str[]; int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
while (gets(str))
{
int len = strlen(str);
for (int i = ; i < len; i++)
{
if (str[i] == ' ') printf("%%20");
else printf("%c", str[i]);
}
printf("\n");
}
return ;
}

Problem 4

  题10:二进制中1的个数。这个题用到一个很有意思的结论:将一个整数减去1再和这个数进行与运算(&),得到的结果相当于把这个数的二进制表示的最右边的1变成0。

 #include <cstdio>

 int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
int T;
scanf("%d", &T);
while (T--)
{
int n;
scanf("%d", &n);
int cnt = ;
while (n)
{
cnt++;
n &= (n-);
}
printf("%d\n", cnt);
}
return ;
}

Problem 10

  网上有关于更优化的方法,参见这里,而这篇文章讲解的更详细一点。

  PS:看来还是应该在看题的时候去完成代码实现,看完后在回过头写代码就没什么动力了...

  题目26:复杂链表的复制。比正常的链表多出一个sibling指针,可以指向链表中任意一个节点或NULL。

  题目41:和为s的两个数字 & 和为s的连续正数序列

  给一个有序数组,找出两个数使得和为s。(jobdu 1352)

 #include <cstdio>
#define MAXN 1000000+100 int a[MAXN]; int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
int n, k;
while (scanf("%d%d", &n, &k) != EOF)
{
for (int i = ; i < n; i++) scanf("%d", &a[i]);
int i = , j = n-;
bool ok = false;
while ()
{
if (i >= j) break;
if (a[i] + a[j] == k)
{
ok = true;
break;
}
else if (a[i] + a[j] < k) i++;
else j--;
}
if (ok) printf("%d %d\n", a[i], a[j]);
else printf("-1 -1\n");
}
return ;
}

  给一个正整数s,求和为s的连续正整数序列(至少含有两个数)。(jobdu 1354)

 #include <cstdio>

 void printResult(int left, int right)
{
for (int i = left; i <= right; i++)
printf("%d%s", i, i==right ? "\n" : " ");
} int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
int n;
while (scanf("%d", &n) != EOF && n >= )
{
int left = , right = , sum = ;
int mid = n / ;
bool solved = false;
while (left <= mid)
{
while (sum < n)
{
right++;
sum += right;
}
if (sum == n)
{
printResult(left, right);
solved = true;
sum -= left;
left++;
}
else if (sum > n)
{
sum -= left;
left++;
}
}
if (!solved) printf("Pity!\n");
printf("#\n");
}
return ;
}

《剑指Offer》笔记(更新中)的更多相关文章

  1. 剑指Offer——企业级项目中分层的含义与依据及多态的优势

    剑指Offer--企业级项目中分层的含义与依据及多态的优势   关于以上两点,由于项目经验较少,自己不是很明白,特整理如下. 常见分层架构模式 三层架构 3-tier architecture   微 ...

  2. 《剑指offer》 链表中倒数第k个节点

    本题来自<剑指offer> 链表中倒数第k个节点 题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 倒数第k个节点,而且只能访问一遍链表,定义两个节点,两者之间相差k个距离,遍历 ...

  3. 剑指Offer:数组中出现次数超过一半的数字【39】

    剑指Offer:数组中出现次数超过一半的数字[39] 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如,输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于这 ...

  4. 剑指Offer:链表中倒数第k个结点【22】

    剑指Offer:链表中倒数第k个结点[22] 题目描述 输入一个链表,输出该链表中倒数第k个结点. 解题思考 我们定义两个指针L和R,R事先移动K-1个位置,然后两者同时往后移动直到遇到R的下个节点为 ...

  5. 《剑指offer》数组中只出现一次的数字

    本题来自<剑指offer> 数组中只出现一次的数字 题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: 思路一:在<剑指of ...

  6. 剑指 Offer 62. 圆圈中最后剩下的数字 + 约瑟夫环问题

    剑指 Offer 62. 圆圈中最后剩下的数字 Offer_62 题目描述 方法一:使用链表模拟 这种方法是暴力方法,时间复杂度为O(nm),在本题中数据量过大会超时. 方法二:递归方法 packag ...

  7. 剑指 Offer 61. 扑克牌中的顺子 + 简单题 + 思维

    剑指 Offer 61. 扑克牌中的顺子 Offer_61 题目描述 java代码 package com.walegarrett.offer; /** * @Author WaleGarrett * ...

  8. 剑指 Offer 51. 数组中的逆序对 + 归并排序 + 树状数组

    剑指 Offer 51. 数组中的逆序对 Offer_51 题目描述 方法一:暴力法(双层循环,超时) package com.walegarrett.offer; /** * @Author Wal ...

  9. 剑指 Offer 41. 数据流中的中位数 + 堆 + 优先队列

    剑指 Offer 41. 数据流中的中位数 Offer_41 题目详情 题解分析 本题使用大根堆和小根堆来解决这个寻找中位数和插入中位数的问题. 其实本题最直接的方法是先对数组进行排序,然后取中位数. ...

  10. 剑指 Offer 39. 数组中出现次数超过一半的数字 + 摩尔投票法

    剑指 Offer 39. 数组中出现次数超过一半的数字 Offer_39 题目描述 方法一:使用map存储数字出现的次数 public class Offer_39 { public int majo ...

随机推荐

  1. Sea.Js使用入门

    1.Sea.Js是什么 seajs相对于RequireJs与LabJS就比较年轻,2010年玉伯发起了这个开源项目,SeaJS遵循CMD规范,与RequireJS类似,同样做为模块加载器.示例 // ...

  2. 配置Eclipse支持java和xml文件的代码补全功能

    百度经验:jingyan.baidu.com 本文介绍如何配置Eclipse,使得在编写代码时无论是*.java还是*.xml文件都能够通过使用ALT+/快捷键实现代码不全的功能. 本文实验环境为:W ...

  3. 选择LDO的方法(转)

    http://www.micro-bridge.com/news/sort.asp?dy1=技术资料&dy2=产品相关资料&page=2 作者:LANDA PHAM   来源:德州仪器 ...

  4. javascript 用call来继承实例属性

    xxx.call(thisObj, arg1,...)的调用可以改变当前函数的执行环境为传入的thisObj对象.利用这一点可以实现继承————当前的对象获得XXX的属性和方法. 例子: functi ...

  5. docker入门实战笔记

    1.什么是docker: docker翻译为搬运工,在这里应该可以理解为搬运应用的工具,也就是云.先了解其运用场景之后更容易对他形成深刻理解. Docker提供了一种可移植的配置标准化机制,允许你一致 ...

  6. 母亲的牛奶(milk)

    母亲的牛奶(milk) 题目描述 农民约翰有三个容量分别是A.B.C升的桶,A.B.C分别是三个从1到20的整数,最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到另一个桶中,直 ...

  7. USACO Section 1.3 Mixing Milk 解题报告

    题目 题目描述 Merry Milk Makers 公司的业务是销售牛奶.它从农夫那里收购N单位的牛奶,然后销售出去.现在有M个农夫,每个农夫都存有一定量的牛奶,而且每个农夫都会有自己的定价.假设所有 ...

  8. 线段树扫描线 HDU 1542

    n个矩形 问他们覆盖的面积重复的就算一次 x数组存线段  然后根据横坐标排一下 z 线段树 l - r   就是1 ~ 2*n #include<stdio.h> #include< ...

  9. docker k8s 1.3.8 + flannel

    docker k8s + flannel kubernetes 是谷歌开源的 docker 集群管理解决方案. 项目地址: http://kubernetes.io/ 测试环境: node-1: 10 ...

  10. 可能是最简单的方式:利用Eclipse创建基于Maven的Web项目

    1. 新建一个maven项目 2.在弹出框中选择创建一个简单项目 3. 然后输入参数,需要注意的是,在packagin中,选择war,web项目应该选择war 4. 点击finish后,基本项目结构就 ...