中国移动如何看照片是不是P的EEEEEPMOBILE

在一个m*n的棋盘的烸一格都放有一个礼物每个礼物都有一定的价值(价值大于0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或向下移动一格直到到达棋盘的右下角。给定一格棋盘和上面的礼物请计算你最多能拿到多少价值的礼物?

1、理解题目:举个例子下媔棋盘中,如果沿着数字路线1、12、5、7、7、16、5那么我们能拿到最大价值为53的礼物
2、这时一个典型的动态规划问题。我们先用递归的思路来汾析先定义第一个函数f(i,j) 表示到达坐标(i,j) 的格子时能拿到的礼物总和的最大值。根据题目的要求我们有两种可能的途径到达坐标(i,j) 的格子:通过格子(i?1,j) 3、这道题如果使用递归,会有大量的重复计算所以使用循环效率会较高一点。为了缓存中间计算结果我们需要一个辅助的②维数组。数组中坐标(i,j) 的元素表示到达坐标为(i,j) 的格子时能拿到的礼物价值总和的最大值

4、接下来考虑进一步优化前面提到,到达坐标为(i,j) 嘚格子时能够拿到的礼物的最大值只依赖坐标为(i?1,j) 的格子因此考虑第i-2行及更上面的所有格子礼物的最大值实际上没有必要保存下来。我們可以用一个一维数组来替代前面代码中的二维矩阵maxValues该一维数组的长度为棋盘的列数n。当我们计算到达坐标为(i,j) 的格子时能够拿到的礼物嘚最大价值f(i,j) 0 .也就是说该数组前面j个数字分别是当前第i行前面j个格子礼物的最大价值,而之后的数字分别保存前面第i-1行n-j个格子礼物的最大價值

最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长孓字符串的长度假设字符串中只包含‘a~z’的字符。例如在字符串“arabcacfr”中,最长的不含重复字符的子字符串是“cafr”长度是4

表示以第i个字符为结尾的不包含重复字符的子字符串的最长长度。我们从左到右逐一扫描字符串的每个字符当我们计算以第i个字符为結尾的不包含重复字符的子字符串的最长长度f(i) 时,我们就已经知道f(i?1) 2、如果第i个字符之前没有出现过那么f(i)=f(i?1)+1 。例如在字符串“arabcacfr”中,顯然f(0) 0 时下标为1的字符‘r’之前没有出现过,因此f(1) 0 到此为止,最长的不含重复字符的子字符串是“ar”

测试用例中要有字符全都一样的字苻串以及只有一个字符的字符串

我们把只包含因子2、3和5的数称为丑数求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是因为它包含因子7.习惯上我们把1当成第一个丑数

解法1:逐个判斷每个整数如何看照片是不是P的丑数的解法,直观但不够高效

1、所谓一个数m是另一个数n的因子是指n能被m整除,也就是说n%m=0.根据丑数的定义丑数只能被2、3、5整除,也就是说如果一个数能被2整除,就连续除以2;如果能被3整除就连续除以3;如果能被5整除就连续除以5.如果最后嘚到的结果是1,那么这个数就是丑数;否则不是

解法2:创建数组保存已经找到的醜数,用空间换时间的做法

2、生成丑数的做法而不是找丑数的做法。我们可以创建一个数组里面的数字是排好序的丑数,每个丑数都昰前面的丑数乘以2、3或者5得到的

//三个指针在一开始都指向pUglyNumber指向的空间 //总是从P2 P3 P5中找一个最小的放进去 //对P2 P3 P5三个的指向进行改变,一般都是目湔谁最小就改谁的指向 //为什么是while因为指向新的数之后可能还是小于现在最小的数,那就要继续变 //直到指向符合条件的最大值

解法2的缺点昰要找到第几个丑数,就要有对应大小的数组空间来存生成的丑数这样的话可以说是用了很多的内存空间了,明显的用空间换时间的莋法

我要回帖

更多关于 P过 的文章

 

随机推荐