这几天为了找工作开始看《剑指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. Extjs 4.1 struts2.3 返回json 初试

    之前曾经使用过3.x版本的extjs,当时可以结合struts实现各种基本的增删查改.但是4.1版本中增加了一些属性,出现了一些新的使用方法,导致错误不断,有的时候调用到相应的action却返回不了值 ...

  2. 分类算法-----KNN

    摘要: 所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用她最接近的k个邻居来代表.kNN算法的核心思想是如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别,则该样本也属于 ...

  3. Eclipse中代码提示框的背景色修改

    Preferences->General->Appearance->Colors and Fonts 修改Basic中的Content Assist backgroud color[ ...

  4. UI和UE有什么区别呢?

    UCD(以用户为中心的设计)UE(用户体验)UI(用户界面)HCI(人机交互)usability(易用性)

  5. STM32软件复位(基于库文件V3.5)

    源:STM32软件复位(基于库文件V3.5) void SoftReset(void) { __set_FAULTMASK(); // 关闭所有中端 NVIC_SystemReset();// 复位 ...

  6. Web爬去的C#请求发送

    public class HttpControler { //post请求发送 private Encoding m_Encoding = Encoding.GetEncoding("gb2 ...

  7. Qt5:不规则按钮的实现---通过贴图实现

    在应用开发中,有时候为了美观会在UI界面中增加不规则的按钮 现在我们就来看看Qt中是怎么实现不规则按钮的 /////////////////////////////////////////////// ...

  8. c# toolstrip控件怎么把左边的几个小点去掉??

    选中你的toolstrip 然后属性属性中有个 GripStyle 设置Hidden

  9. mark一篇文章--用nodejs搭建一个本地反向代理环境

    调试线上代码的时候,我们经常遇到的一个问题就是 本地一套环境,线上一套环境,本地没有的文件用线上的这种需求.我简单来说下使用nodejs如何做到. 先说下不用nodejs我们怎么做,工具比如fiddl ...

  10. 修炼dp( 2 )

    P1084 数字三角形4 题解:dp+dfs. #include <iostream> #include <cstdio> #include <algorithm> ...