
算法小题目
anialy
这个作者很懒,什么都没留下…
展开
-
Java Future使用,顺便求算丑数问题
简述:最近,在熟悉Java多线程,但是光写个多线程输出个string什么的,似乎又太简单无趣了,所以在熟悉Java特性的同时实现了一个丑数的求算知识点:1. Java 的Future接口可以存放交给线程处理并得到的输出,如Future 就是交给一个线程去处理,但处理完了后得给我返回一个String以此类推,Future>就是的给我返回一个List的list2原创 2012-09-27 23:29:50 · 2319 阅读 · 0 评论 -
背包问题的 javascript和java 实现
简述:一个背包,转载 2014-10-08 00:09:33 · 2480 阅读 · 0 评论 -
位操作实现加法
简述:设想使用位操作,实现加法思路:1. 做与操作,得到相同的位,左移进位得到一个值2. 做异或操作,得到不同的位,得到另一个值上两个值循环直到其中某个为0 ,选另一个为最终结果实现:package com.anialy.JavaTest;import java.io.BufferedReader;import java.io.IOExceptio原创 2013-06-15 15:07:05 · 2074 阅读 · 0 评论 -
二叉树中找寻 节点和 为某个值的路径
简述:在一棵二叉树中,找寻节点和为某个值的路径树如图,过程:在BinaryNode类中声明一个sum 用来记录当前遍历的总结点的和,path用来记录节点注意的是在遍历完一个节点之后回溯时,有退出步骤,需要将sum减去遍历的那个节点,同时从现有path中remove那个节点代码:package offer;import java原创 2012-11-18 22:29:48 · 1703 阅读 · 0 评论 -
输入数字组成的字符串,取k切分后的最大K乘积
简述:输入一个字符串,切分成k项,选取其中最大的k项乘积,并求取最大值如“123”切为2分,则两项最大乘积是12 * 3 = 36算法描述:array[ i ][ j ] = Max( array[i - 1][ m] * convToInt(str, m + 1, j] )表示 i项 , 从0 到 j 的截取int的值 等于, i - 1项m长度的最大值 乘上,原创 2012-10-31 13:26:22 · 2190 阅读 · 0 评论 -
找两个字符串的最长公共子序列的长度
简述:找两个字符串的最长公共子序列的长度例如String str1 = “caaac”;String str2 = "bbdaaaca";两者最长公共子序列就是aaac 为4代码实现:package offer;public class LongestCommonSubsequence { public static void ma原创 2012-10-21 23:57:49 · 5743 阅读 · 0 评论 -
求非连续最长单调递增子序列
简述:设计一个O(n2)以及O(nlogn)时间的算法,找出n个数组成的序列的最长单调递增子序列例如,4, 5, 8, 8, 4, 0, 8, 3, 6, 9, 这十个数字其中最长递增子序列为 4,5,8,9O(n2)的算法(找子问题)这个算法的角度是,遍历一遍原始数组,如果假设当前遍历的元素是第i个那么只要考虑i号元素之前的最大递增子序列,如果该子序列原创 2012-10-02 16:23:02 · 4657 阅读 · 3 评论 -
用递归找一个字符串中 最长连续出现的字符的个数
简述:用递归找一个字符串中 最长连续出现的字符的个数例如:“abbbbbbc"返回的就是6package offer;public class GetLongestConsecutiveSubString { //递归实现找出字符串中连续出现次数最大的字符的长度 private int getLongestConsecutiveSubString(原创 2012-10-20 14:28:29 · 4651 阅读 · 1 评论 -
爬楼梯问题
简述:需要爬N层的楼梯,有max种爬楼梯方式,需要求算总共爬到N层 有几种方法1. 回溯是比较直观的,就是一层一层向上叠加,走到顶层就是一种方法,得到结果2. 一维动态规划的话, 就是用一个数组保留走过的楼层,比如最大步伐是3, 然后我现在考虑走到第10层有几种走法就是 resultArray[10] = resultArray[ 10 - 1] + resultArray[10原创 2012-10-03 15:44:01 · 1825 阅读 · 0 评论 -
Java实现 找出数组中出现次数超过数组长度一半的元素
简述 :给定一个数组,找出数组中元素出现次数超过数组长度一半的元素如数组:[4, 3, 2, 1, 1, 1, 1, 1, 1, 0 ]其中超过一半的元素就是 1两种实现的 算法描述:1) 用快排中的Partition,分割数组直到找到pos等于数组正当中的那个元素,返回那个索引的值2) 可以考虑成,结果的那个值对抗不等于结果的那个值,两方面打擂台,最后谁还转载 2012-10-16 01:34:47 · 4459 阅读 · 3 评论 -
乘方的优化算法
简述实现pow函数用来,计算诸如2的10次方传统的方法是拿2一个个地去乘,但是这个效率可以优化优化方法就是2 先 做一步到4 然后在4的基础上到16 用这种基于之前的乘方结果的运算,可以较好提高运行效率算法描述:这种算法其实直观的看就是分解指数比如2的10次方,10的二进制数为1010 , 用加括号的方式看就是(((2的0次方)的平方 * 2的1次方)的平方)的平方原创 2012-10-13 21:15:31 · 2673 阅读 · 0 评论 -
动态规划解乘法表问题
简述:这道题是标准的动态规划题定义于字母表∑{a,b,c)上的乘法表如表1所示表1∑乘法表 a b ca b b ab c b ac a c c依此乘法表,对任一定义于∑上的字符串,适当加括号表达式后得到一个表达式。例如,对于字符串x=bbbba,它的一个加括号表达式为i(b(bb))(ba)。依乘法表,该表达式的值为a。试设计一个动转载 2012-10-13 02:09:06 · 6164 阅读 · 1 评论 -
计算二进制数有多少个‘1’
简述:写个小函数统计一个int数字的二进制数中有多少个1, 通过时间记录100000次运算开销,观察两种算法耗时知识点:1. 移位操作2. windows库的时间统计代码:#include#includeusing namespace std;//& 0x01 by bit and then do 1 bit shiftint Nu转载 2012-09-20 23:03:33 · 2016 阅读 · 0 评论 -
求算两个字符串之间的编辑距离
简述:设A和B是两个字符串,要用最少的字符操作将字符串A转换为字符串B字符串操作包括,1)删除一个字符2)插入一个字符3)将一个字符改为另一个字符算法:模拟构造一个(m + 1)行,(n+1)列的表格每一次都是在前一次的计算结果下,得到当前的值首先是三个特殊情况 用srcStr表示源字符串,dstStr 表示目标字符串1) 两个空字符串的编原创 2012-10-03 14:18:43 · 6624 阅读 · 0 评论 -
找寻丢失的Id
简述:从源sIds组生成目标dIds组过程中找寻丢失的Id代码: public static void main(String[] args) { List sIds = Arrays.asList(new String[]{"b", "a", "c", "e", "d"}); List dIds = Arrays.asList(new String[]{"b", "e原创 2014-10-15 09:33:28 · 799 阅读 · 0 评论