- 博客(12)
- 资源 (1)
- 收藏
- 关注
原创 java上传文件
Upload File (Using commons-fileupload-1.2.2.jar tool) File Upload <form name="uploadform" method="post" action=
2011-09-09 12:35:39
445
原创 打靶 (排列组合)
打靶,从1环到10环,打中几环就得几分,如果脱靶得0分,共打10次,问得到90分的可能性有几种?思路:排列组合问题,首先想到递归。调试中出现栈溢出,因此要注意尽量去掉分支。public class Shoot { static int times = 0; static void shoot(int sum, int count) { if((90-su
2011-06-17 21:18:00
1697
原创 快速找出第K大的元素 (快速排序)
快速排序算法:每次找到元素在有序数组中的最终位置(前面的数都比它小,后面的数都比它大)。因此,在算法中,将比第K大数小的都放在它的前面,大的放后面,有效快速找出目标数。时间复杂度接近于O(N) public class Qksort { public static void main(String[] args) { int[] nums = new int[]{7,9,8,
2011-06-05 23:46:00
4822
原创 最大公约数 (欧几里得算法)
思想:两个整数x,y(x>0,y>0)的最大公约数等于y与x%y的最大公约数。 y=at, x=at+x%y, 所以x,y(x>0,y>0)的最大公约数等于y与x%y的最大公约数
2011-05-31 20:31:00
762
原创 一堆数是否连续 (异或)
题目:给出一堆数,判断是否连续。要求效率最高。思路:遍历一次,找出最大与最小。如果最大减最小为数组长度,且数组内没有重复,即为符合要求。其中,判断重复,使用异或的效率最高。最终时间为O(n)。
2011-05-31 11:30:00
2922
原创 堆排序及应用
public class HeapSort { //堆排序 static void shift(int[] nums, int low, int high) { int i=low, j=2*low, temp; temp = nums[i]; while(j=2; i--) { temp = nums[i]; nums[i] = nums[1]; nums[1] = temp; shift(nums,
2011-05-29 21:27:00
1458
原创 一次遍历,求单链表倒数第N个节及中间节点
<br />求倒数第N个节点思路:“标尺”。在遍历时一个空间始终存储着离它距离为N的节点的引用。<br /> <br />中间节点思路:联想到“烧一跟香需要一小时,两头同时点着烧完需半小时”原理。一个速度为1的遍历,同时有一个速度为2的遍历,当速度为2的遍历结束时,速度为1的就遍历到中间节点。<br />此思路可以延伸到一次遍历找到任意1/n(长度的任意1/n)的节点位置。<br /> <br />思路清晰后,实现就很简单,代码略。
2010-11-14 12:11:00
1461
原创 随机输出一组数字 (洗牌算法)
要求高效。时间上高效必然是空间上换来的,思路关键为: boolean[] nm = new boolean[100]; 将出现过的数字在数组中做下标记。时间复杂度为 O(n)代码如下:public class NoRepeatNum { public static void main(String[] args) { int[] num = create(100); for(int i : num) System.out.print(i + " "); System.out.println();
2010-11-13 17:17:00
1151
原创 输入3个数,找出共同数字
<br />题目: 输入3个数,输出具有的共同数字(如果存在)。例如,输入123,245,782则输出:2; 输入313,123,431则输出1,3。<br /> <br />为了实现高效,实现代码的时间复杂度与输入数字的位数成正比。<br />思路关键为: int[] num = new int[10]; num数组存储的是每个数字出现的个数,下标为该数字,值为此数字的个数。<br /> <br />实现代码如下:<br />import java.util.*;<br />public class Te
2010-11-13 16:40:00
1390
原创 回旋打印
题目: “转着圈”打印,先给出运行结果图输入3时: 输入4时: 输入5时: 这个题想的时间较长,其实一想到二维数组就好办,就是纯粹的数学归纳问题了,给出我的代码如下:public class Test { public static void p(int n) { int[][] num = new int[n][n]; int a = 1; if(n%2==0) { for(int r=0; r for(int i=r; i num[r
2010-11-13 16:20:00
747
原创 求子串和的最大值
题目描述:有31,-41,59,26,-53,58,97,-93,-23,84十个数。SUM(N,M)表示从第N个数到到第M个数的和。例如:SUM(2,3)=-41+59=18。问:最大的和是多少?对应的N和M是多少?要求高效,考虑数组所有可能出现的情况。下午想了
2010-11-13 16:07:00
1603
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人