
algorithm
文章平均质量分 55
flywithmj
这个作者很懒,什么都没留下…
展开
-
希尔排序学习心得
希尔排序是基于插入排序的一种快速排序算法,核心思想是使待排序序列中间隔为h(变化的)的元素都是有序的。 基本思路如下:假设待排序序列为A,长度为N(方便起见,可以理解为数组)。首先,取一个小于N的整数h1作为第一个增量,这样,序列就被分为h1组,所有距离为h1的数据分在一组中,对各组进行插入排序;然后,再取第二个增量h2(h2 综合网上大家意见,h初次取值(即h原创 2012-12-08 16:21:58 · 1371 阅读 · 0 评论 -
约瑟夫环问题
约瑟夫环问题可概述如下:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。我自己使用队列实现了一下,代码如下,虽然简洁,但是时间复杂度不是很好。 deque dq; for (int原创 2013-05-05 21:08:35 · 680 阅读 · 0 评论 -
字符串组合解法
题目:输入一个字符串,输出该字符串中字符的所有组合。 举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 这里提供一种新思路。算法的思想就是用整数的二进制表示字符串排列中是否有字符,1表示有该字符,0表示没有。 代码如下: char str[] = "abcd"; int length = strlen(str); int k =原创 2013-05-21 21:22:23 · 737 阅读 · 0 评论 -
解决算法问题时需要注意的问题(持续更新中)
最近在做算法题的时候,发现很多细节需要注意,总结如下: 1,非法输入:对输入变量,应该检查其是否合适,例如整数范围、指针是否为空。最常见的,函数输入字符串,一定要检查字符串是否为空。 2,函数返回结果有时可以以传入指针或者引用的形式来返回,这样函数的返回值可以携带其他信息。 3,涉及整数问题,一定要考虑正负数和0,切记不能默认是正数。其他原创 2013-05-06 19:42:34 · 722 阅读 · 0 评论 -
最长单调递增子序列问题
问题描述:找出n个数的数组中最长单调递增子序列。 解法一:先对数组进行排序,归并、堆、快速等都可以,时间复杂度为O(nlogn)。然后求这个新数组与原数组的最长公共子序列,动态规划解决,时间复杂度为O(n*n)。 解法二:以一个数组记录临时的最长序列,然后记录这个序列中的位置的变化。直接上代码: void increase_LCS(){ co原创 2013-05-27 16:00:07 · 1262 阅读 · 0 评论 -
求数组中三个只出现一次的数字
题目: 一个数组中,有三个数字只出现一次,其他数字均出现偶数次,求这三个数字。例如 数组为{1,2,3,4,5,6,4,5,6}。三个数字为1,2,3。 我的算法的基本思想是:按位将数组分为两组(采用循环,最多32位,从低位开始,逐一判断数组中的每一个数字),直到两组数据的亦或结果均不为零。这时,这三个数据被分到两组中,奇数个数据的数组的亦或结果为所求的一个数字。原创 2013-05-27 21:32:25 · 1117 阅读 · 0 评论