本月博客排行
-
第1名
龙儿筝 -
第2名
lerf -
第3名
fantaxy025025 - johnsmith9th
- zysnba
- xiangjie88
年度博客排行
-
第1名
青否云后端云 -
第2名
宏天软件 -
第3名
gashero - wy_19921005
- vipbooks
- benladeng5225
- e_e
- wallimn
- javashop
- ranbuijj
- fantaxy025025
- jickcai
- gengyun12
- zw7534313
- qepwqnp
- 解宜然
- ssydxa219
- zysnba
- sichunli_030
- sam123456gz
- arpenker
- 龙儿筝
- tanling8334
- kaizi1992
- gaojingsong
- xpenxpen
- jh108020
- wiseboyloves
- ganxueyun
- xyuma
- xiangjie88
- wangchen.ily
- Jameslyy
- lemonhandsome
- luxurioust
- jbosscn
- mengjichen
- zxq_2017
- lzyfn123
- nychen2000
- forestqqqq
- wjianwei666
- ajinn
- zhanjia
- Xeden
- hanbaohong
- java-007
- 喧嚣求静
- kingwell.leng
- mwhgJava
最新文章列表
插入排序(包括希尔排序)及其变体
package com.algorithm;
/**
* 插入排序及其变体
*
* List可转化为数组进行排序
* Object数组中的元素必须实现Comparable接口,即元素必须是可比的
*/
public class InsertSort {
/**
* 直接插入排序
*/
public static void insertS ...
Algorithm 05 : 给定一个数组,寻找第K大的数
给定一个无序数组,求数组中第K大的数。
答:求一个数组中第K大数可以借用快速排序算法的思想,主要思路如下:
(1)在数组中随机选择一个数作为支点。
(2)将比作为支点数大的所有数放在这个支点的左边,支点放在数组中间的位置。
(3)设支点左边元素的个数为L,那么可以分以下三种情况:
(a)当K=L的时候,直接返回支点即是所要求的第K大的 ...
Algorithm 04 : 寻找两个有序数组中的第N个数,要求时间复杂度为O(logm+logn)
Question : Give a divide and conquer algorithm for the following problem : you are
given two sorted lists of size m and n, and are allowed unit time access
to the it ...
Algorithm 03 : 合并两个有序数组
Question : Merge a sorted array of size n into another sorted array of size m+n.
问题:合并两个有序的数组,将一个长度为n的数组插入到指定的长度为m的数组中。
/**
* @author YuHuang
* @vision 2011-10-04
* This program is only ...
Algorithm 02 : 以K个元素为一组逆转链表
Question : Reverse a Linked List in groups of given size K.
问题:以K个元素为一组逆转链表。
/**
* @author YuHuang
* @vision 2011-10-03
* This program is only for algorithm training.
*
*/
clas ...
Algorithm 01 : 寻找最长有序子序列
Question : To find max sorted contiguous subsequence of an Array.
问题:查找数组中的最长有序子序列。
/**
* @author YuHuang
* @vision 2011-10-03
* This program is only for algorithm training.
*
*/
...
最优二叉树(哈弗曼树)
提到哈弗曼树就必须提到节点权值,权值一般具有实际意义,比如此节点出现的概率,次数等。
必须提供权值才能构建出一棵哈弗曼树,因为哈弗曼树的定义为带权路径长度最小的二叉树。
树的带权路径长度为所有叶子节点的带权路径长度。
节点的带权路径长度为该节点到树的路径长度乘以节点权值。
哈希曼树最主要的应用是产生哈希曼编码。
为特点元素设计哈希曼编码要求二进制编码尽可能的短,并且任意一个字符的编码不是另外一 ...
经典算法——最长平台问题
经典最长平台算法
已知一个已经从小到大排序的数组,这个数组中的一个平台(Plateau)就是连续的一串值相同的元素,并且这一串元素不能再延伸。例如,在1,2,2,3,3,3,4,5,5,6中[1]、[2,2]、[3,3,3]、[4]、[5,5]、[6]都是平台。尝试编写一个程序,接受一个数组,把这个数组中最长的平台找出来。在上面的例子中3,3,3就是该数组中最长的平台。
要求:
1、使用的变量越 ...
[转载 + 实现] 只有10%程序员能正确实现二分查找算法
在CSDN看到一篇题为《只有10%程序员能正确实现二分查找算法》的文章(原文链接http://news.csdn.net/a/20100423/218099.html),很有意思,在不进行测试的情况下, ...
Threaded Binary Tree
#include <stdio.h>
enum pointer_tag { LINK, THREAD };
struct node {
char* data;
struct node* lchild;
struct node* rchild;
enum pointer_tag ltag, rtag;
};
void visit(char* ...
Solution to 10.4-6 in Introduction to Algorithms, Third Edition
#include <stdio.h>
#define RIGHT_SIBLING 0
#define PARENT 1
#define NIL 0
struct node {
int key;
struct node* left_child;
struct node* p;
int flag;
};
int visit_paren ...
Solution to 10.4-5 in Introduction to Algorithms, Third Edition
#include <stdio.h>
#define TRAVERSE 0
#define LEFT_BACKTRACK 1
#define RIGHT_BACKTRACK 2
struct node {
int key;
struct node* p;
struct node* left;
struct node *right;
};
...
Solution to 10.3-5 in Introduction to Algorithms, Third Edition
#include <stdio.h>
int next[9];
int key[9];
int prev[9];
int L;
int F;
void print_array();
void print_list(int);
void print_lists();
void create();
void exchange(int, int);
void ...
Randomize-In-Place
#include <stdlib.h>
#include <stdio.h>
void swap(int *a, int *b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void info(int arr[], int len) {
int i;
for (i = 0; ...
计算数组元素的乘积
Given an array a[i], your task is to generate an array b[i], b[i] is the product of the numbers in the array except the i th number.
My solution:
DP problem?
Define two functions:
f(i)=a[ ...