全部博文(115)
发布时间:2015-08-06 16:46:14
原题目是求一个无序数组中最长的等差数列。 求随机数构成的数组中找到长度大于=3 的最长的等差数列, 输出等差数列由小到大:如果没有符合条件的就输出格式:输入[1,3,0,5,-1,6]输出[-1,1,3,5] 解法如下: 1.排序 2.设极值分别为min, max,那么公差范围为(1..max-min); 3.公差d从(1..max-min)循环,求出每次的最长的数列长度f(d) <根据已得到的数列的长度,还可以进一步减少循环次数> 所以该题目基础是求出一个有序数组中公差为d的最长等差数列。 较简单动态......【阅读全文】
发布时间:2015-08-06 16:46:03
1.多人排成一个队列,我们认为从低到高是正确的序列,但是总有部分人不遵守秩序。如果说,前面的人比后面的人高(两人身高一样认为是合适的), 那么我们就认为这两个人是一对“捣乱分子”,比如说,现在存在一个序列:176, 178, 180, 170, 171这些捣乱分子对为<176, 170>, <176, 171>, <178, 170>, <178, 171>, <180, 170>, <180, 171>,那么,现在给出一个整型序列,请找出这些捣乱分子对的个数(仅给出捣乱分子对的数目即可,不用具体的对)要求:输入:为一个文......【阅读全文】
发布时间:2015-08-06 16:45:57
1.最长递增子串(codepad.org已验证) 2.最长不连续公共子串(codepad.org已验证) 3.字符串的编辑距离(codepad.org已验证) 4.上下两个等长数组,可互换同下标元素,求上下两数组和可能的最小差值(codepad.org已验证) 5.连续子数组的最大和(codepad.org已验证) 代码都为简单实现版,均为递归算法,用作练手和思路记录。 1.最长递增子串 点击(此处)折叠或打开 #define MAX 10000 #include <stdio.h> #include &l......【阅读全文】
发布时间:2015-08-06 16:45:49
练手代码,codepad.org已验证。该算法为海量数据的求第k大的数的解法之一。建立大小为k的最小堆,每输入一个数,如果比堆顶大,那么替换堆顶元素,然后维护最小堆的特性。堆顶元素即为第k大的数。 点击(此处)折叠或打开#include <stdio.h>#include <stdlib.h>#include <assert.h>#define LEFT(a) ((a)<<1)+1#define RIGHT(a) ((a)<<1)+2#define SWAP(a,b) a^=b;b^=a;a^=b;int heapcount;int*......【阅读全文】
发布时间:2015-08-06 16:45:45
练手代码。(codepad.org 编译通过,未运行) 判断两个单链表是否相交,如相交的话求交点。 方法: 记录两个链表的长度差。然后长的那个先出发,当剩下的长度和短的相同时,短的链表也出发。 当两个链表遍历到结点相同时,为相交结点。 若两个链表无交点,则最后结点为NULL。直接返回即可 点击(此处)折叠或打开 typedef struct tagNode{ int value; struct tagNode* next; } Node; Node *g......【阅读全文】