
数据结构
种向日葵的小仙女
这个作者很懒,什么都没留下…
展开
-
哈夫曼树
当树中的节点被赋予一个表示某种意义的数值,我们称之为该节点的权。从树的根节点到任意节点的路径长度(经过的边数)与该节点上权值的乘积称为该节点的带权路径长度。树中所有叶节点的带权路径长度之和称为该树的带权路径长度(WPL)。当带权路径长度最小的二叉树被称为哈夫曼树,也成为最优二叉树。 如下图所示,有三课二叉树,每个树都有四个叶子节点a,b,c,d,分别取带权7,5,2,4。他们的带权路径长度...原创 2018-05-09 14:46:21 · 1377 阅读 · 0 评论 -
大数相加,大数相减
public class 大数相加 { public static String add(String n1, String n2){ StringBuilder result = new StringBuilder(); // 反转字符串 String rn1 = new StringBuilder(n1)...原创 2018-08-20 15:42:26 · 508 阅读 · 0 评论 -
跳跃游戏
题目:给定数组,array[i]=k,表示从位置i向右跳K个距离 jump:表示目前跳了多少步 cur:表示如果只能跳jump步,他能达到的最远距离 next:代表如果再多跳一步,能够达到的最远距离public static void main(String[] args) { int[] array={2,3,1,1,4}; System.out.println(min(a...原创 2018-08-03 09:58:13 · 619 阅读 · 0 评论 -
股票买卖问题
题目:股票买卖问题,{7, 1, 5, 3, 6, 4}。买卖2次public static void main(String[] args){ int[] array={7, 1, 5, 3, 6, 4}; System.out.println(maxProfit(array)); } public static int maxProfit(int[] array){ ...原创 2018-08-03 09:41:27 · 947 阅读 · 0 评论 -
换钱最大的方法数
array={5,10,25,1},可以重复,求能组成15元的方法数。 dp[i][j]=sum(dp[i-1][j],dp[i][j-array[i]]);public static void main(String[] args){ int[] array={5,10,25,1}; int sum=15; System.out.println(min(array,sum)...原创 2018-08-03 09:34:13 · 293 阅读 · 0 评论 -
不重复换钱最少货币数
array={5,2,5,3},各有一张,求能组成10元的最少的张数。 dp[i][j]=min(dp[i-1][j],dp[i-1][j-array[i]]+1); public static void main(String[] args){ int[] array={5,2,5,3}; System.out.println(min(array,...原创 2018-08-02 16:34:13 · 323 阅读 · 0 评论 -
换钱最少的货币数
array={5,2,3},有5元、2元、3元的若干张,求能组成20元的最少的张数。 dp[i][j]=min(dp[i-1][j],dp[i][j-array[i]]+1); public static void main(String[] args){ int[] array={5,2,3}; System.out.println(min(arra...原创 2018-08-02 16:29:06 · 483 阅读 · 0 评论 -
最长公共子序列
dp[i][j]=max{dp[i-1][j],dp[i][j-1]},array1[i-1]!=array2[j-1] =dp[i-1][j-1]+1,array1[i-1]==array2[j-1] =0,i=0orj=0public static void main(String[] args) { String str1="abcde";...原创 2018-08-02 16:03:55 · 252 阅读 · 0 评论 -
最长公共子串
dp[i][j]=dp[i-1][j-1]+1,array1[i]==array2[j] =1,array1[i]==array2[j],i=0orj=0public static void main(String[] args){ String str1="abc"; String str2="abgde"; System.out.println(find(st...原创 2018-08-02 15:35:09 · 237 阅读 · 0 评论 -
矩阵最短路径
dp[i][j]=Math.min(dp[i-1][j], dp[i][j-1])+array[i][j]public static void main(String[] args){ int[][] array={{1,3,5,9},{8,1,3,4},{5,0,6,1},{8,8,4,0}}; System.out.println(min(array)); } public ...原创 2018-08-02 15:15:05 · 2150 阅读 · 0 评论 -
最长回文串
dp[i][j]表示已i开头和以j结尾的字符串是回文串public static void main(String[] args){ String str="abcvovabe"; System.out.println(longest(str)); } public static String longest(String str){ if(str==null||str.le...原创 2018-08-02 14:36:25 · 164 阅读 · 0 评论 -
最长递增子序列
题目:一个数组{2,1,5,3,6,4,8,9,7},找出最长递增子序列。dp[i]=max{dp[i],dp[j]+1(0<=j<i,array[j]<array[i])}public static void main(String[] args){ int[] array={2,1,5,3,6,4,8,9,7}; int[] dp=build(array);...原创 2018-08-02 11:27:47 · 439 阅读 · 0 评论 -
拔河问题
题目:n 个人参加拔河比赛,每个人有自己的重量,现在需要把他们分成两组进行比赛,每个人属于其中的一个组。为使比赛公平,求使得两组重量差最小的分配。dp[i][j]=max(dp[i-1][j],dp[i-1][j-array[i]]+array[i])public static void main(String[] args){ int[] array={10,23,41,12};...原创 2018-08-02 10:59:02 · 2685 阅读 · 0 评论 -
背包问题
题目:有3个物品,放入一个重量为10的背包,3个物品的重量分别是3,4,5。价值分别是4,5,6。请问如何放置,使背包的价值最大。dp[i][j]=max{dp[i-1][j],dp[i-1][j-w[i]]+p[i]},dp[i][j]表示前i个物品放到重量为j的背包里面的最大价值。(0<i<=3,0<j<=10)代码如下:public class 背包问题...原创 2018-08-02 10:16:55 · 198 阅读 · 0 评论 -
给定一个乱序数组a,找到所有两个和为target的数组下标index1,index2
给定一个乱序数组a,找到所有两个和为target的数组下标index1,index2使用hash_map,时间复杂度为o(n),空间复杂度为o(n).Exp:a{ 2, 3, 1, 4, 5, 6, 7 },target=6;输出:0 3 2 4import java.util.Arrays;import java.util.HashMap...原创 2018-07-30 16:27:44 · 1099 阅读 · 1 评论 -
PCA
1.特征中心化。即每一维的数据都减去该维的均值。2.计算B的协方差矩阵C3.3.计算协方差矩阵C的特征值和特征向量。4.选取大的特征值对应的特征向量,得到新的数据集。 ...原创 2018-07-28 16:19:53 · 206 阅读 · 0 评论 -
桶排序、递归、迭代、尾递归
1. 桶排序:桶排序将[0,1)区间划分为n个相同的大小的子区间,这些子区间被称为桶。然后将n个输入元素分别放入各自的桶中。因为输入时均匀独立的,所以一般不会有很多数同时落在一个桶中的情况。这样,我们想对各个桶中的数据进行排序,然后遍历每个桶,按照次序把各个桶中的元素列出来即可。 对于N个待排数据,M个桶,平均每个桶[N/M]个数据的桶排序平均时间复杂度为:O(N)+O(M*(N/M)...原创 2018-07-16 22:15:11 · 531 阅读 · 0 评论 -
大数相乘
public class 大数相乘 { public static void main(String[] args) { String str1="123"; String str2="45"; System.out.println(multiply(str1,str2)); } public static String multiply(String str1,String...原创 2018-08-29 10:00:41 · 219 阅读 · 0 评论