导航

2013年12月22日

摘要: 题目: n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。思路: 想了好多除了链表模拟以外的方法,但是都不如这个简单省事,所以最后干脆还是用链表模拟了。(最简方案附在最后)方案: 用环形双向链表模拟整个过程,并计算步数,选择两个方向中最短的那个方向行动代码: 1 //题目5:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身, 2 //第二个为... 阅读全文

posted @ 2013-12-22 10:21 生存在夹缝中 阅读(212) 评论(0) 推荐(0)

2013年12月20日

摘要: 题目: 求一组整数数组中的连续子序列和的最大值;如: 4 5 -3 10 -7 3 最大的连续子序列的和为 16 (4+5+(-3)+10)程序从test.txt中读取数组,屏幕输出最大的和。思路: 最开始是最普通的思路,begin和end两次遍历寻找最大和,这个方法是o(n^2)级。后来尝试(在同学肯定的告诉我有n级别算法之后才果断去尝试)用n级别算法解决,最终考虑和一些可以限制begin的条件,感觉这些条件应当适用:在最大和子序列的和为正数的前提下,1以最大和子序列的开头为开头的最大和子序列的任意子序列之和必为正数2最大和子序列的开头的前一项必为负数,或这个开头就是整个数列的开头 。依.. 阅读全文

posted @ 2013-12-20 19:21 生存在夹缝中 阅读(181) 评论(0) 推荐(0)

2013年12月19日

摘要: 题目: 随机分配座位,共n个学生,使学号相邻的同学座位不能相邻思路: 最开始的时候还以为是个近似于n皇后的题目。后来说只要输入是纯随机的,输出一个正确的结果就可以了。第一反应自然是从头暴力随机到尾,每次输出之后检查,一旦有了和之前重复的数字或者和前一位相邻的数字就扔掉重新随机当前位置。但是这个方法第一慢第二有bug:一旦随机出这样的序列,091827364,最后一位5无法放入,需要有一个”回头“的机制。此时同学正好提到了插入排序和index数组,于是想到可以随机建立一个index数组,这样就不用向前检查重复,省去了最浪费时间的地方,接着index拖着原数组快速排序就好了。于是这是当时定下的.. 阅读全文

posted @ 2013-12-19 17:25 生存在夹缝中 阅读(554) 评论(0) 推荐(0)

2013年12月17日

摘要: 题目34:消除括号 输入一个由括号括成的字符串,消除内部所有括号或是返回错误。方案: 对字符串遍历一次,记录当前已路过的括号个数(step),初始为0,访问每个点时将当前访问点值赋给向前step的位置。时间复杂度o(n),空间复杂度1。同时记录左右括号数以便检查是否出错(出错的两种可能:1左右括号数目不符2右括号出现在与其配对的左括号之前)。顺便可以返回总括号对数。代码: 1 int CutBracketsFromStr(char *str) 2 { 3 int i; 4 int len=strlen(str); 5 printf("Before test:%p\... 阅读全文

posted @ 2013-12-17 14:38 生存在夹缝中 阅读(253) 评论(0) 推荐(0)

摘要: nothing 阅读全文

posted @ 2013-12-17 14:22 生存在夹缝中 阅读(100) 评论(0) 推荐(0)