09 2018 档案
摘要:题目描述:题目链接 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n2) 。 进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗? 这个题目和最长公共子序列一样,都是可
阅读全文
摘要:题目描绘:题目链接 题目中需要求解一个数组中等差数组的个数,这个问题可以利用动态规划的思路来分析。 三步骤: 1:问题归纳。题目需要求解等差数列的和,我们可以用一个数组保存前i个元素可以构成的等差数列的个数。dp[ i ],最后需要的时候再求和。 2:递归关系式的书写:等差数列无非要满足这个关系:a
阅读全文
摘要:题目描述:题目链接 对于求解一个十进制数转化为二进制时里面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 ;其二进制组成最低位
阅读全文
摘要:题目描述:题目链接 同样对于这个问题,我们可以考虑用动态规划来解决。 解决动态规划常见的三个步骤: 1:问题的归纳。对于 i,j 位置上的最短路径可以用d[ i ][ j ]表示。 2:归纳递推式:d[ i ][ j ] = Math.min( d [ i - 1 ] [ j ] , d [ i ]
阅读全文
摘要:题目描述:题目链接 这道题目也是一道动态规划的题目: 分析一道动态规划的题目可以将解决问题的思路分为下面三个部分: 1:问题的描述。可以定义数组d[ i ] 用于表示第i -1家可以获得的最大金额。 2:给出递推公式:d[ i ] = max( d[i-1] , d[i-2] + nums[i] )
阅读全文
摘要:题目描述:买卖股票的最佳时机 题目要求求解能获得最大利润的方式? 可以定一个二维数组 d [ len ] [ 2 ] ,其中d[ i ][ 0 ] 表示前i天可以获得的最大利润;d[ i ][ 1 ]表示前i天中股票最低的价格。 因此可以得到一个递推公式: d[ i ] [ 0 ] = max(d[
阅读全文
摘要:多线程中的死锁 在前面的分析中,我们知道一个对象可以用Synchronized方法或者其他的加锁形式来防止别的任务在互斥还没有释放的时候就访问这个对象。 试想一下这样的情况:某个任务在等待另一个任务,而后者又在等待别的任务,这样一直下去,知道这个链条的任务又在等待第一个任务释放锁,任务之间的互相等待
阅读全文
摘要:ThreedLocal在中文的翻译中应该翻译成:线程局部变量。 1:设计的原因 在并发编程的时候,成员变量如果不做任何处理其实是线程不安全的,各个线程都在操作同一个变量,显然是不行的,并且我们也知道volatile这个关键字也是不能保证线程安全的。那么在有一种情况之下,我们需要满足这样一个条件:变量
阅读全文
摘要:题目: 给定一个字符串 s,找到 s 中最长的回文子串。 示例 1: 示例 2: 方法1:暴力求解 思路:可以通从两端到中间遍历字符串,如果碰到字符串是回文串,则该回文串一定是是最长回文串。 效果:判断的整个过程其实有三个内部循环,时间复杂度接近 O(n^3) ,空间复杂度O(n) 方法2:动态规划
阅读全文
摘要:问题描述: 对于两个序列X和Y的公共子序列中,长度最长的那个,定义为X和Y的最长公共子序列。X Y 各自字符串有顺序,但是不一定需要相邻。 最长公共子串(Longest Common Substring ):顺序相同,并且各个字符的位置也必须相邻。 最长公共子序列(Longest Common Su
阅读全文
摘要:链表问题 1:链表相加问题 (思路) 2:链表的部分翻转 3:链表去掉重复元素,只保留第一个重复元素 4:链表去掉所有重复的元素 5:链表按照某一个结点划分 6:单链公共结点问题 7:删除链表的倒数第n个结点 8:获得链表的倒数第n个结点 9:合并两个有序链表 10:两两交换链表中的结点 11:旋转
阅读全文