随笔分类 -  a algorithm a week

algorithm Learning in summer This part is a recorde of my summer learning about algorithm.
摘要:题目描述:题目链接 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n2) 。 进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗? 这个题目和最长公共子序列一样,都是可 阅读全文
posted @ 2018-09-24 20:39 SnailsCoffee 阅读(571) 评论(0) 推荐(0) 编辑
摘要:题目描述:题目链接 对于求解一个十进制数转化为二进制时里面1的个数,可以先看一下概况: 十进制数 二进制数 1的个数 1 1 1 2 10 1 3 11 2 4 100 1 5 101 2 6 110 2 7 111 3 看上面的一系列数字的二进制中1的个数: 对于一个偶数 n ;其二进制组成最低位 阅读全文
posted @ 2018-09-23 15:51 SnailsCoffee 阅读(1359) 评论(0) 推荐(0) 编辑
摘要:题目描述:题目链接 同样对于这个问题,我们可以考虑用动态规划来解决。 解决动态规划常见的三个步骤: 1:问题的归纳。对于 i,j 位置上的最短路径可以用d[ i ][ j ]表示。 2:归纳递推式:d[ i ][ j ] = Math.min( d [ i - 1 ] [ j ] , d [ i ] 阅读全文
posted @ 2018-09-23 15:04 SnailsCoffee 阅读(135) 评论(0) 推荐(0) 编辑
摘要:题目描述:题目链接 这道题目也是一道动态规划的题目: 分析一道动态规划的题目可以将解决问题的思路分为下面三个部分: 1:问题的描述。可以定义数组d[ i ] 用于表示第i -1家可以获得的最大金额。 2:给出递推公式:d[ i ] = max( d[i-1] , d[i-2] + nums[i] ) 阅读全文
posted @ 2018-09-23 14:12 SnailsCoffee 阅读(255) 评论(0) 推荐(0) 编辑
摘要:题目描述:买卖股票的最佳时机 题目要求求解能获得最大利润的方式? 可以定一个二维数组 d [ len ] [ 2 ] ,其中d[ i ][ 0 ] 表示前i天可以获得的最大利润;d[ i ][ 1 ]表示前i天中股票最低的价格。 因此可以得到一个递推公式: d[ i ] [ 0 ] = max(d[ 阅读全文
posted @ 2018-09-23 13:44 SnailsCoffee 阅读(186) 评论(0) 推荐(0) 编辑
摘要:题目: 给定一个字符串 s,找到 s 中最长的回文子串。 示例 1: 示例 2: 方法1:暴力求解 思路:可以通从两端到中间遍历字符串,如果碰到字符串是回文串,则该回文串一定是是最长回文串。 效果:判断的整个过程其实有三个内部循环,时间复杂度接近 O(n^3) ,空间复杂度O(n) 方法2:动态规划 阅读全文
posted @ 2018-09-09 15:39 SnailsCoffee 阅读(222) 评论(0) 推荐(0) 编辑
摘要:问题描述: 对于两个序列X和Y的公共子序列中,长度最长的那个,定义为X和Y的最长公共子序列。X Y 各自字符串有顺序,但是不一定需要相邻。 最长公共子串(Longest Common Substring ):顺序相同,并且各个字符的位置也必须相邻。 最长公共子序列(Longest Common Su 阅读全文
posted @ 2018-09-05 17:35 SnailsCoffee 阅读(434) 评论(0) 推荐(0) 编辑
摘要:主要参考资料 : 算法导论 1:时间复杂度介绍 对于包含n个数的输入数组来说,快速排序是一种最坏情况时间复杂度为O(n2)的排序算法.虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能非常好:它的期望时间复杂度是O(nlgn).而且O(nlgn)中隐含的常数因子 阅读全文
posted @ 2017-08-23 09:53 SnailsCoffee 阅读(634) 评论(0) 推荐(0) 编辑
摘要:优先队列作为堆排序的高级应用具有十分广泛的应用场景,其中一个就是在共享计算机系统的作业调度。最大优先队列记录将要执行的各个作业以及它们之间的相对优先级. 当一个作业完成或者被中断后,调度器调用 EXTRACT-MAX 从所有的等待作业中,选出具有最高优先级的作业来执行。 在任何时候,调度器可以调用  阅读全文
posted @ 2017-08-22 09:42 SnailsCoffee 阅读(550) 评论(0) 推荐(0) 编辑
摘要:堆是一个数据结构,可以看作是一个数组,并且具有完全二叉树的性质,每个结点都对应一个数组的元素。 堆和数组对应的关系类似于一种层序排列。 比如:对于数组 A= {27,17,16,13,10,1,5,7,12,14,8,9} A数组在堆中表现的情况如下 1:各结点之间的性质 对于根节点从 0 开始的一 阅读全文
posted @ 2017-08-21 20:43 SnailsCoffee 阅读(501) 评论(0) 推荐(0) 编辑
摘要:归并排序的基本思路利用分治方法解决。 分治模式的每一层递归都有三个思路: 分解原问题为若干子问题,这些子问题是原问题的规模较小的实例。解决这些子问题,递归地求解各子问题。然而,若子问题的规模足够小,则直接求解.合并这些子问题的解成原问题的解。 归并排序算法完全遵循分治模式。直观上其操作如下:分解:分 阅读全文
posted @ 2017-08-07 20:31 SnailsCoffee 阅读(398) 评论(0) 推荐(0) 编辑
摘要:问题描述: 求对于长度为N的数组A,求子数组的和接近0的子数组,要求时间复杂度O(NlogN) (1) 求出所有的sum[i] sum[i]表示A的前 i 项和 (2) 对sum[-1,0,...,N-1]排序,然后计算sum相邻元素的差的绝对值,最小记为 min1 (3) min1 : 在A中任意 阅读全文
posted @ 2017-07-27 16:17 SnailsCoffee 阅读(1335) 评论(0) 推荐(0) 编辑
摘要:前言:一周一算法,任道而重远! 问题描述:给定一个数组A[0,…,n-1],求A的连续子数组,使得该子数组的和最大。 比如:数组:A =[ 1, -2, 3, 10, -4, 7, 2, -5] 最大子数组:3, 10, -4, 7, 2 1:直接求取 思想:先从第一个元素开始向后累加, 每次累加后 阅读全文
posted @ 2017-07-27 15:22 SnailsCoffee 阅读(368) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示