直通BAT面试算法精讲课 --动态规划
1.有数组penny,penny中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim(小于等于1000)代表要找的钱数,求换钱有多少种方法。
给定数组penny及它的大小(小于等于50),同时给定一个整数aim,请返回有多少种方法可以凑成aim。
[1,2,4],3,3
返回:2
penny[i]代表货币的面值。
f[n],n代表可以组成的面值。f[n]代表可以组成的方法。 f[0] 代表组成0,只有一种方法,就是不选任何货币,就可以组成0;
f[j] 代表组成j,有几种方法,等于使用n-1个penny[i]的值的方法。循环累加到aim,最后就得到了组成aim的方法。 例如:
penny[i]=5,那么组成的数,是f[5],f[10],f[15] ,能被5整除的,都为前一个加上当前的值。
当所有面值的货币,都循环完成,就得到了所求值。
class Exchange {
public:
    int countWays(vector<int> penny, int n, int aim) {
        int f[];
        memset(f,,sizeof(f)); f[] = ;
        for(int i = ;i < n;++ i)
            for(int j = penny[i];j <= aim;++ j)
                f[j] += f[j - penny[i]];
        return f[aim];
    }
};
2.有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。为了防止溢出,请将结果Mod 1000000007
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。
#define Mod 1000000007
class GoUpstairs {
public:
int cnt[];
int countWays(int n) {
cnt[] = ;
for(int i = ;i <= n;++ i)
cnt[i] = ((i >= ? cnt[i - ] : ) + (i >= ? cnt[i - ] : )) % Mod;
return cnt[n];
}
};
这个题可以是使用2个变量,循环交替的增加就可以了。就会占用连续内存了。
3.有一个矩阵map,它每个格子有一个权值。从左上角的格子开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。
给定一个矩阵map及它的行数n和列数m,请返回最小路径和。保证行列数均小于等于100.
[[1,2,3],[1,1,1]],2,3
返回:4
class MinimumPath {
public:
    int getMin(vector<vector<int> > map, int n, int m) {
        // write code here
        vector<vector<int> > dp(n,vector<int>(m));
        dp[][] = map[][];
        for(int i=;i<n;i++){
            dp[i][] = map[i][] + dp[i-][];
        }
        for(int i=;i<m;i++){
            dp[][i] = map[][i] + dp[][i-];
        }
        for(int i=;i<n;i++){
            for(int j=;j<m;j++){
                dp[i][j] = min(dp[i][j-]+map[i][j],dp[i-][j]+map[i][j]);
            }
        }
        return dp[n-][m-];
    }
};
4.这是一个经典的LIS(即最长上升子序列)问题,请设计一个尽量优的解法求出序列的最长上升子序列的长度。
给定一个序列A及它的长度n(长度小于等于500),请返回LIS的长度。
[1,4,2,5,3],5
返回:3
int getNum(vector<int>a){
    vector<int>dp(a.size());
    if (a.size() < )return ;
    if (a.size() == )return a[];
    int len = a.size();
    dp[] = ;
    for (int i = ; i < len; i++){
        for (int j = ; j < i; j++){
            if (a[i]>a[j]){
                dp[i] = max(dp[i], dp[j] + );
            }
        }
    }
    return dp[len - ];
}
直通BAT面试算法精讲课 --动态规划的更多相关文章
- 直通BAT面试算法精讲课2
		
对于一个int数组,请编写一个冒泡排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] clas ...
 - 直通BAT面试算法精讲课1
		
1.有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树. 给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右 ...
 - 牛客网《BAT面试算法精品课》学习笔记
		
目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...
 - Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦
		
Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦 近期活动: 2014年9月3日,第8次西安面试&算法讲座视频 + PPT 的下载地址:http ...
 - 书评<<剑指offer 名企面试官精讲典型编程题>>
		
前前后后阅读了一周, 感慨很多, 面试考察的是一个人的综合能力, 这一点从面试官的角度去解读, 确实对面试的理解更立体. *) 具体考察的点1) 扎实的基础2) 高质量的代码3) 清晰的思路4) ...
 - BAT面试的准备—iOS篇
		
本文主要用于记录在准备BAT面试中关于iOS遇到的问题和做一些相关面试题的笔记 iOS网络层设计 1.网络层和业务层的对接设计 使用哪种交互模式来和业务层对接 : 使用Delegate为主,目的是为了 ...
 - 2019年BAT面试通关宝典:数据结构+JVM+并发编程+分布式...
		
前言 金三银四俗称跳槽黄金季,很多同学都想趁着这段时间拿高薪,去更牛逼的公司工作,认识更多大牛,提升自己的职场竞争力. 那怎样才能通过BAT面试官的考核?怎样成为一名Offer收割机? 收割Offer ...
 - 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置
		
VM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内存模型 2.JVM垃圾 ...
 - 算法起步之动态规划LCS
		
原文:算法起步之动态规划LCS 前一篇文章我们了解了什么是动态规划问题,这里我们再来看动态规划另一个经典问题,最长公共子序列问题(LCS),什么是子序列,我们定义:一个给定序列将其中的0个或者多个元素 ...
 
随机推荐
- MySQL☞lower函数
			
lower(列名/字符串):将大写字母改成小写字母 格式: select lower(列名/字符串) from 表名 如下图:
 - Objective-C Block数据类型 @protocol关键字
			
Block数据类型 Block封装了一段代码 可以在任何时候执行 Block可以作为函数参数或者函数的返回值 而其本身又可以带输入参数或返回值 苹果官方建议尽量多用Block 在多线程 异步任务 集合 ...
 - openjudge-2的100次方阶乘
			
开始进行的第一天 #include <stdio.h> #include <string.h> int main() { int n; scanf("%d" ...
 - 为什么说session依赖cookie,以及cookie的常用知识
			
session的用法 session在Flask中通常用做设置某些页面的权限,比如某些页面必须要登录才可以看到,登录的信息或标志就放到session中.它的使用过程如下: 在整个flask工程的启动文 ...
 - 搭建hexo博客并部署到github上
			
hexo是由Node.js驱动的一款快速.简单且功能强大的博客框架,支持多线程,数百篇文章只需几秒即可生成.支持markdown编写文章,可以方便的生成静态网页托管在github上. 感觉不错. 前端 ...
 - javaee开发工具及环境配置过程
			
在配置javaee开发环境的过程中遇到过很多问题,在此系统的整理一下我之前的配置过程 注:配置过程学习自<JSP&Servlet学习笔记(第二版)>详细过程可以阅读此书.在文章的最 ...
 - 手机端网页返回顶部js代码
			
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" cont ...
 - django request bug
			
bug描述:django请求request接收数据时,如果参数中包含分号时,会导致分号后面的消息丢失. 比如前台js调用代码 $.post('/get_params', { "A" ...
 - POJ 3304 Segments(线的相交判断)
			
Description Given n segments in the two dimensional space, write a program, which determines if ther ...
 - StrBlobPtr类——weak_ptr访问vector元素
			
#include <iostream> #include <memory> #include <string> #include <initializer_l ...