自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 Burst Balloons

题目来源leetcode 312给定一个长度为n的正整数数组,代表一组气球,正整数的值代表气球的价值。现在要依次引爆这些气球,每当引爆一个气球的时候,就可以得到该气球的价值与与其相邻的两个气球的价值的乘积。如果引爆一个气球时,它没有两个与其相邻的气球,那么在空缺的相邻位就视为有一个价值为1的气球。要求求出通过引爆这些气球可以得到的最大分数。这个问题可以用动态规划的思想来解决。首先在原数组的

2016-11-28 15:27:33 418

原创 证明k-生成树问题是NP完全问题

k-生成树是指给定一个无向图,找到一个生成树,其中每个节点的度数不超过k。首先要验证所找的生成树是否符合要求,只需要遍历每个点,检查其度数即可,时间复杂度为V+E,为多项式时间复杂度,因此k-生成树问题为NP问题。这个问题可以由Rudrata环路问题归约。当k=2时,所要寻找的生成树其实就是一条经过所有顶点的路径,只不过相比Rudrata路径而言,这个生成树是没有回路的。那么Rudrata

2016-11-28 14:10:16 1877

原创 证明精确4SAT问题为NP完全问题

精确4SAT问题是这样的问题。输入为一组子句,每个子句都是析取式,恰好有4个变量,并且每个变量在每个子句中最多出现一次。现在要证明精确4SAT问题是NP完全问题。首先4SAT问题显然是NP问题,因为验证一个解是否正确的时间复杂度和SAT问题相同。现在我们要把SAT问题归约到精确4SAT问题。可以参考SAT问题归约到3SAT问题的思路。对于SAT问题的一个子句A=(a1 or a2 or .

2016-11-20 17:16:35 1682

原创 Patching Array

题目来源 leetcode 330给定一个数组和一个数n,要求向数组中添加最少的元素个数,使得可以利用数组中的一些数,组成1-n中的任何一个数,求添加的元素个数。可以想到一个很简单的结论,那就是,如果数组中的元素能够组成1-p,在数组中加入一个元素q,那么数组中的元素就可以组成1-p+q。利用这个思想,解决这道题。用一个整数num来表示数组可以组成0-num中的任何一个元素,num

2016-11-13 12:04:43 388

原创 Create Maximum Number

题目来源 leetcode 321给定两个数组A和B,每个数字为0-9中间的一个数,要求从这两个数组中取出k个数组成一个新的数组。对于这个数组中的任意两个元素a和b,如果a和b是从同一个数组中取出的元素,那么a和b在新数组中的相对位置必须与原数组中的相对位置相同。这个数组可以代表一个十进制整数,求出一个数组,它代表的整数最大。这个题目最先开始采用了这样一种方法:用dp[i][j][m]表示

2016-10-31 18:07:25 303

原创 frog jump

题目来源 leetcode 403青蛙要过条河,河被分为n个区域,每个区域要么是水,要么是岩石。现在青蛙在第一块岩石上,它要通过不断跳跃到岩石上来到达最后一块岩石以渡河。青蛙最先开始只能跳跃过一个区域,若一次跳跃跳跃了k格,那么青蛙下一次跳跃只能跳跃k-1或k或k+1格,并且青蛙只能向前跳跃。给定一个stones数组,用于表示岩石的位置。例如[0,1,3,5,6,8,12,17]表示岩石分别在

2016-10-24 19:36:33 338

原创 Dungeon Game

题目来源 leetcode 174给定一个矩阵,矩阵的左上角为一个骑士,矩阵的右下角为被恶魔劫持的公主,骑士要救出公主。骑士为了尽快救出公主,只能向右或向下走。每个格子中有一个整数,整数为0代表空格,整数为负数-n代表骑士在走到这个格子的时候因为遇到敌人要损失n点生命值,整数为正数m时,表示骑士在走到这个格子的时候可以通过魔法石回复m点生命。当骑士的生命值降为0或以下时,骑士就挂了。要求求解出

2016-10-22 16:42:10 253

原创 Perfect Squares

题目来源 leetcode 279给定一个整数n,n可以分解为m个平方数的和,求m的最小值。平方数可以重复,例如12可以分解为4+4+4。这个问题用动态规划比较好求解。如果对背包问题比较熟悉,最容易想到的方法就是将平方数看成数类物体,将这些物体组合(可重复),构成n的最小物体数就是答案。用dp[n]表示构成n的平方数的最小数目。则dp[n]=min(dp[n-k*i*i]+dp[k*i*i

2016-10-22 16:09:48 268

原创 Minimum Height Trees

题目来源 leetcode310给定一个无根树,要求输出某些结点,这些结点在成为根之后,树的高度最小。计算这个树的每个结点的度,删除所有度为一的结点生成一个新树,再删除所有度为一的结点,如此循环。最后剩下的一个或两个结点就是所求结点,算法复杂度为O(V+E),因为这和用BFS进行拓扑排序的过程是相同的。这个算法为什么是正确的呢?首先对于一棵树,若结点数大于2,则其度数为一结点绝对不是所求结

2016-10-09 18:58:40 307

原创 Remove Invalid Parentheses

题目来源 leetcode 301给定一个包含许多左括号和右括号的字符串,删除最少的括号,使得删除括号后的字符串中的括号匹配,要求输出所有结果。首先来计算一下究竟最少要删除多少个左括号和右括号。可以从左到右扫描字符串,用x1和x2分别记录要删除的左括号和右括号,遇到左括号时x1+1,遇到右括号时若x1大于0,则x1-1,否则x2+1,这样可以保证删除最少的左括号和右括号。之后对整个字符

2016-10-09 18:33:27 443

原创 Longest Increasing Path in a Matrix

题目来源leetcode 329给定一个矩阵,矩阵中的每一个元素为一个整数。在矩阵中寻找这样一条路径:路径上每一个结点为矩阵中的一个元素,从起点到终点,元素的值递增,且两个相邻的元素在矩阵中的位置也是相邻的(上下左右4个方位,对角线不算相邻)。求出矩阵中最长的这种路径的长度。可以从矩阵中的第一个元素开始,进行深度优先搜索,算出以每一个结点作为起点的最长路径长度,最后取这些长度的最大

2016-09-25 13:03:17 240

原创 Serialize and Deserialize Binary Tree

题目来源 leetcode 297给定一棵二叉树,二叉树的每个结点的信息为一个整数,要求实现两个功能(1)将二叉树转换为一个字符串。(2)将字符串转换为一棵二叉树。二叉树和字符串之间具体如何转换不做具体规定,只需要满足将一棵二叉树T利用功能(1)转换为一个字符串S后,再利用功能(2)可以将S转换为T。因为要将结点具有整数信息的二叉树转换为字符串,则需要用字符串表示数字,并且可以区分哪些字符

2016-09-19 17:03:32 381

原创 Merge k Sorted Lists

题目来源leetcode 23给定k个排好序的序列,要求归并他们为一个排好序的序列。从第一个序列开始,一个一个地归并是一种简单的做法。然而复杂度是多少呢?假设序列平均长度为n,那么这种做法所需要的时间可以这样计算:2n+3n+4n+......+kn。最后,n可以看作是一个常熟,这样得到是O(k^2)的复杂度。我们寻求更好的办法。采用分治策略,对于一组要合并的序列,先合并前一半序列,再

2016-09-11 10:46:55 222

原创 Count of Smaller Numbers After Self

题目来源leetcode 315    给定一个乱序的数字序列A,生成一个序列B。B[i]表示A[i+1]到A的最后一项中比A[i]小的数字的个数。    如果用简单的扫描,需要O(n^2)的复杂度,我们寻求更好的办法。    设原序列为A,所求序列为B,所有元素初始化为0。构造一个结构体,保存了A中每个元素的值和下标,设置结构体序列C,对C进行按元素的值从大到小的归并排序。在归并两个

2016-09-11 10:45:01 290

原创 解数独

题意很简单,给出一个不完整的数独,解出数独。输入为一个9*9的矩阵,矩阵中没有填好的空格用“.”表示,题目假设有唯一解。这是一个搜索题目。大致思路为:先找出一个空格,尝试往里面填写数字,填好数字之后检查矩阵是否符合数独规则,若符合则寻找下一个空格,若不符合则尝试下一个数字。如果当前处理的空格中填入数字1到9都不合理的话,那说明上一个处理的空格填写的数字是不合理的,这就需要回溯,继续处理

2016-09-04 13:03:56 594 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除