算法
rabbitbug
没有
展开
-
连续正整数之和
一道百度之星编程比赛的题目题目描述:一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 15=7+8 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。 输入数据:一个正整数,以命令行参数的形式提供给程序。 输出数据:在标准输出上打印出符合题目描述的全部正整数序转载 2007-08-10 17:33:00 · 1612 阅读 · 0 评论 -
Shaker 排序法 - 改良的气泡排序
請看看之前介紹過的氣泡排序法: for(i = 0; i flag = 0; for(j = 0; j if(number[j+1] SWAP(number[j+1], number[j]); flag = 1; } }转载 2007-10-29 14:10:00 · 1424 阅读 · 0 评论 -
三色棋问题(荷兰国旗问题)
假設有一條繩子,上面有紅、白、藍三種顏色的旗子,起初繩子上的旗子顏色並沒有順序,您希望將之分類,並排列為藍、白、紅的順序,要如何移動次數才會最少,注意您只能在繩子上進行這個動作,而且一次只能調換兩個旗子。在一條繩子上移動,在程式中也就意味只能使用一個陣列,而不使用其它的陣列來作輔助,問題的解法很簡單,您可以自己想像一下在移動旗子,從繩子開頭進行,遇到藍色往前移,遇到白色留在中間,遇到紅色往後移,如转载 2007-10-26 11:02:00 · 4080 阅读 · 1 评论 -
m个元素的集合取n个元素的子集
假设有个集合拥有m个元素,任意的从集合中取出n个元素,则这n个元素所形成的可能子集有那些?假设有5个元素的集点,取出3个元素的可能子集如下:{1 2 3}、{1 2 4 }、{1 2 5}、{1 3 4}、{1 3 5}、{1 4 5}、{2 3 4}、{2 3 5}、{2 4 5}、{3 4 5}这些子集已经使用字典顺序排列,如此才可以观察出一些规则: 如果最右一个元素小于原创 2007-10-26 21:14:00 · 3515 阅读 · 0 评论 -
学生成绩得分排行
假设有一教师依学生座号输入考试分数,现希望在输入完毕后自动显示学生分数的排行,当然学生的分数可能相同。这个问题基本上要解不难,只要使用额外的一个排行阵列走访分数阵列就可以了,直接使用下面的程式片段作说明: for(i = 0; i count; i++) ...{ juni[i] = 1; for(j = 0; j count; j++) ...{ if转载 2007-10-29 11:12:00 · 1424 阅读 · 1 评论 -
一个算法
一个含N个整数的数组,其中一个元素出现次数 k>N/2,找出这个元素。限O(N)时间,O(1)空间。 public class FindKinN ...{ public static void main(String[] args) ...{ int[] a = ...{1,1,1,1,2,2,1,1,2,2,2,1}; int count,cur,n转载 2007-12-25 11:19:00 · 1080 阅读 · 8 评论 -
25匹马,请找出最快的3匹。
25匹马,请找出最快的3匹。一次只能赛5匹,只能知道这5匹马的排序,没有秒表。力求用最少的操作。 先分5组,假设a1>a2>...a5b1>b2>...b5c1>c2>...c5d1>d2>...d5e1>e2>...e5然后每组第一,假设a1>b1>c1>d1>e1这样a1肯定是第一,剩下的第二,三的candidate是:a2,a3,b1,b2,c1,再比一次即可,一共7次转载 2009-01-04 21:27:00 · 5680 阅读 · 7 评论 -
给定数组,求最大的非邻接子数组之和
给定数组,求最大的非邻接子数组之和,复杂度o(n)例如: i) 3 2 7 10 结果是 13 ( 3 and 10) ii) 3 2 5 10 7 结果是 15 (sum of 3, 5 and 7) 对数组 a[i], i = 1, 2, 3, ..., N , 结果是 f[N] f[1] = a[1] f[2] = max (a[1], a[2]) f[n原创 2008-11-19 22:53:00 · 741 阅读 · 0 评论 -
在一个循环有序的数组里查找特定值
在一个循环有序的数组里查找特定值。(循环有序就是指数组里的各项都是有序的,但是最小值不一定是数组的第 0 项,而可能是其中任意一项,然后逐项递增,到数组尾的时候再回到第 0 项)在这样的数组中查找就不能直接使用二分法了。可以使用一个二分法的变形,除了判断中心值之外,还要判断两端的值,以此确定循环开始点在中点的哪一边,并判断所查找的值是否在循环起始点的哪边,并采用不同的处理方式。 #转载 2008-11-20 00:10:00 · 3524 阅读 · 1 评论 -
一个简单的子集产生算法
char[] A={a,b,c,d,...},集合A中,产生所有A的子集{a},{b},{a,b},{a,b,c}...这些。方法一: 根据二进制产生import java.text.*;public class SubSet ...{ public static void main(String[] args) ...{原创 2007-10-26 17:20:00 · 1109 阅读 · 0 评论 -
一道算法题
一个K位的数N (K找出一个比N大且最接近的数,这个数的每位之和与N相同用代码实现之如:0050 所求数为0104112 所求数为121例 3919999700从右向左找到第一个非0 7,7-- ,并且把6移到最后继续扫碰到9就移到最后,找到第一个非9 1, 1++最后变成 3920069999转载 2007-10-21 13:56:00 · 964 阅读 · 0 评论 -
Selection in expected linear time
下面的是用C#写的一个算法, 功能是从一个数组中选择第 i 小的一个数, 平均时间复杂度是Θ(n).using System;using System.Collections.Generic;using System.Text;using System.Diagnostics; class Program...{ static void Main(string[] args)转载 2007-10-21 14:19:00 · 1314 阅读 · 0 评论 -
如何交换a和b两个整数的值,不用额外空间
这个题貌似完全颠覆一般的Logic:交换两个整数需要一个额外的空间用于保存:t = b;b = a;a = t;粗看上去似乎没有办法,但是仔细想一下,既然不能用额外的空间,那么能用的方法就只有数学方法,也许有效,那么第一个想法就是用A+b看看,稍微想一下就可以得到下面这个解法: a = a + b; b = a - b; a = a - b;还有更绝的(由DxZ网友提供)转载 2007-08-10 20:48:00 · 1498 阅读 · 0 评论 -
LCS的java算法---考虑可能有多个相同的最长公共子串
LCS(Longest Common Subsequence) 就是求两个字符串最长公共子串的问题。比如: String str1 = new String("adbccadebbca"); String str2 = new String("edabccadece");str1与str2的公共子串就是bccade. 解法就是用一个矩阵来记录两个字符串中所有位置的两个字符之原创 2007-08-13 14:00:00 · 7610 阅读 · 19 评论 -
最长递增子序列问题的求解
设序列X=是对序列L=按递增排好序的序列。那么显然X与L的最长公共子序列即为L的最长递增子序列。这样就把求最长递增子序列的问题转化为求最长公共子序列问题LCS了。原创 2007-08-13 14:36:00 · 995 阅读 · 0 评论 -
如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
看上去似乎任何已知的算法都无法做到,如果谁做到了,那么所有的排序方法:QuickSort,ShellSort,HeapSort,BubbleSort等等等等,都可以扔掉了,还要这些算法干吗阿,呵呵。不过实际上,在数字范围有限制的情况下,是有一个这样的算法的,只需要用一个数组记录每个数字出现次数就可以了。假定你的数字范围在0到65535范围之内,定义一个数组count[65536](这个转载 2007-08-10 21:47:00 · 2253 阅读 · 1 评论 -
最大子序列
int max_sub(int a[],int size)...{ int i,j,v,max=a[0]; for(i=0;isize;i++) ...{ v=0; for(j=i;jsize;j++) ...{ v=v+a[j];//Sum(i, j+1) = Sum(i, j原创 2007-08-10 15:18:00 · 1140 阅读 · 2 评论 -
用一个简单的办法生成全部排序
有N 个序号:0, 1, 2... N-1其全排序有N!种如何用简单的办法生成全部排序? static int[] a = ...{0,1,2,3,4,5}; static int n = 6; static void swap(int arg1, int arg2) ...{ int temp; temp = a[arg1];原创 2007-08-15 17:06:00 · 1026 阅读 · 0 评论 -
从一个无序的数组中查找遗漏的数
一个包含99个元素的数组,存储了1-100中的99个数字,除了1个以外,这99个数字是乱序排列的。现让你找出到底缺的是哪个数字,要求:1)只能遍历一次;2)除了数组本身以外,只有2个整数单元的额外存储空间。import java.util.*;import java.io.*;public class Some ...{ public static final int HOWMANY=1转载 2007-08-21 17:01:00 · 4593 阅读 · 0 评论 -
从一个无序的数组中查找二个遗漏的数
一个包含98个元素的数组,存储了1-100中的98个数字,除了1个以外,这98个数字是乱序排列的。现让你找出到底缺的是哪个数字,要求:1)只能遍历一次;2)除了数组本身以外,只有2个整数单元的额外存储空间。 import java.util.*;import java.io.*;/** *//** * Title: * Description: * Copyright: Copyrig转载 2007-08-21 17:04:00 · 2047 阅读 · 0 评论 -
阿里巴巴的一个笔试题
坐标系从(0,0)点走到(9,9)点,只能向右或者向上走,其中有些点不能走,问有多少种走法?如图:假如。的位置不能走。(希望图能分辨清,左下角是(0,0))................................。。..........。.......................................................笔算的方法: 设左下为S(转载 2009-06-18 13:08:00 · 1014 阅读 · 0 评论