最长上升子序列(LIS)的定义:    一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8). 三种求解方法: 1. O(n^2)的DP 2. O(nlogn)的二分+贪心法 3. O(nlogn)的树状数组优化的DP 题目:Longest Increasing Subsequence 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2, 继续阅读 >>


刘生玺 18/07/20 12:10:14
数据库软件对大小写不敏感,需要在每条命令末尾添加‘;’ 一、库操作 1. 登录数据库 mysql -u root -p -u指定用户,-p指定使用密码登录 2. 创建数据库 create database 数据库名称; 创建一个数据库,名称为student : create database student 3. 查看已有数据库 show databases; 4. 删除数据库 drop database 数据库名称; 例如: drop database student (友情提醒,谨慎操作) 5. 选择数据库 use 数据库名称; 在确定使用某个数据库后,使用use (数据库名称)切换到目的数据库 use student 二、表操作 1. 新建表 create table 表名称 ( 字段名称 数据类型 [具体要求], ...... ); example: create tab 继续阅读 >>


王良 18/07/20 10:39:07
首先这是我在Git上传我电子书的时候出现的问题。 BTW, 推荐一下电子书放在GitHub很方便 remote: hooks/pre-receive.rb:47:in `’ remote: warning: YOUR-BIG-FILE is 53.66 MB; this is larger than GitHub’s recommended maximum file size of 50.00 MB remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com. remote: error: Trace: 38bb16b8e8e0162f34fdc8517439dab5 remote: error: See http://git.io/iEPt8g for more information. re 继续阅读 >>


陈苏扬 18/07/19 12:23:54
题目:不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 例如,上图是一个7 x 3 的网格。有多少可能的路径? 说明:m 和 n 的值均不超过 100。 示例 1: 输入: m = 3, n = 2 输出: 3 解释: 从左上角开始,总共有 3 条路径可以到达右下角。 1. 向右 -> 向右 -> 向下 2. 向右 -> 向下 -> 向右 3. 向下 -> 向右 -> 向右 示例 2: 输入: m = 7, n = 3 输出: 28 原题链接:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/51/dynamic-programming/105/ 继续阅读 >>


刘生玺 18/07/19 11:15:47
1. 感性认识“动态规划” 1. 基本概念    是求解决策过程(decision process)最优化的数学方法。把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,是一种解决这类过程优化问题的新方法。 2. 使用技巧:    动态规划算法通常用于求解具有某种最优性质的问题!!!特别的 ,动态规划(Dynamic Programming)对于子问题重叠的情况特别有效,因为它将子问题的解保存在表格中,当需要某个子问题的解时,直接取值即可,从而避免重复计算! 3. 基本思想与策略 我们通过一个问题来引出: 提问:动态规划与分治法有什么不同?    答:适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题 继续阅读 >>


刘生玺 18/07/18 19:02:57
全排列算法思想: 1. 全排列的定义和公式:    从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。由排列的定义,显然不同的顺序是一个不同的排列。从n个元素中取m个元素的所有排列的个数,称为排列数。从n个元素取出n个元素的一个排列,称为一个全排列。 公式:全排列数f(n) = n! (定义0!=1) 2. 时间复杂度:    n个数(字符、对象)的全排列一共有n!种,所以全排列算法至少时间O(n!)的。如果要对全排列进行输出,那么输出的时间要O(n∗n!),因为每一个排列都有n个数据。所以实际上,全排列算法对大型的数据是无法处理的,而一般情况下也不会要求我们去遍历一个大型数据的全排列。 3. 全排列的初始思想    为了解决一个算法问题,我们选择从基本的想法做起。先回顾一下我们自己是如何写一组数的全排列的:1,3,5,9 首先肯定是 : 1 ,[3, 5,9的全排列] 3 继续阅读 >>


刘生玺 18/07/17 11:08:08
在阿里云上源码配置Apache,还是遇到很多问题。不过还好都是解决了,所以想写一篇博客来帮助大家配置Apache. 阿里云服务器配置 Centos 6.8 首先来看看阿里云官方配置Apache教程 这看起来很简单 但是其实有很多坑 首先先按官网的下载和解压Apache的源码包 这是我遇到的其中几个问题 checking for APR… no configure: error: APR not found. Please read the documentation. checking for APR-util… no configure: error: APR-util not found. Please read the documentation. configure: error: APR-util not found. Please read the documentation. checking for pcre-config… false configure 继续阅读 >>


陈苏扬 18/07/16 08:24:54
题目:思路:请见三数之和点击打开链接因为是求四个数字之和,所以将i作为第一个数字,其他剩下的三个索引分别为left,mid,right,然后在i的遍历数组的时候,剩下的操作思路和三数之和是一样的。其中需要注意的是,因为求的是四个数字的和,所以left,mid,right分别就已经占用了三个数,所以i只能遍历到 nums.size()-3的前一个下标处。同理,在left遍历的时候,只能遍历到nums.size()-2的位置(因为剩下的两个位置要留给mid,right)。此时还是比较nums[mid]+nums[right]和tem的数值,那么tem的数值根据:nums[left]+nums[mid]+nums[right]+nums[i]=target来推导出,其中nums[right]+nums[mid]=target-nums[left]-nums[i].所以可以推出tem = target-nums[left]-nums[i]。然后再根据大小,来移动mid,right就可以了。代码:class So 继续阅读 >>


胡佳露 18/07/13 00:10:42
问题 有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。每个哲学家的行为是思考,感到饥饿,然后吃通心粉。为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。 一个简单的解法是,用一个信号量表示一支筷子,这五个信号量构成信号量数组,所有信号量初始值为1,第I个哲学家的活动课描述为: semaphore chopstick[0…4] = {1,1,1,1,1}; Repeat think; wait(chopstick[i]); wait(chopstick[(i+1) mod 5]); eat; signal(chopstick[i]); signal(chopstick[(i+1) mod 5]); until false; 若五位哲学家同时饥饿而各自拿起了左边的筷子,这使五个信号量 chopstick 均为 0,当他们试图去拿起右边的筷子时,都将因无筷子而无限 继续阅读 >>


王良 18/07/12 10:56:35
题目:思路:在三数字之和的解题思路上,将所有的三数字之和遍历,然后进行更新最小值即可。其中需要注意的是所给的target减去三数字之和的话可能会为负数,所以要将负数值处理为正数,然后看哪三个数字之和最接近target值。其中若三数字之和大于了target值的话需要将right向升序数组的前方移动,小于的话需要将mid数值往升序数组后移动。三数之和解题思路点击打开链接。代码:class Solution { public: void sort(vector<int>& nums) { int temp = 0; int len = nums.size(); for(int i=0; i<len; i++) { for(int j=i+1; j<len; j++) { if(nums[i] > nums[j]) 继续阅读 >>


胡佳露 18/07/11 13:08:34