package y2019.Algorithm.dynamicprogramming.easy;

/**
* @ProjectName: cutter-point
* @Package: y2019.Algorithm.dynamicprogramming.easy
* @ClassName: Rob
* @Author: xiaof
* @Description: 198. House Robber
* You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night.
*
* Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
*
* Example 1:
*
* Input: [1,2,3,1]
* Output: 4
* Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3).
* Total amount you can rob = 1 + 3 = 4.
* Example 2:
*
* Input: [2,7,9,3,1]
* Output: 12
* Explanation: Rob house 1 (money = 2), rob house 3 (money = 9) and rob house 5 (money = 1).
* Total amount you can rob = 2 + 9 + 1 = 12.
* @Date: 2019/8/16 8:45
* @Version: 1.0
*/
public class Rob { public int solution(int[] nums) {
if (nums == null || nums.length <= 0) {
return 0;
}
//这题主要就是要发现规律,那就是选择盗窃的时候,当前室是否要抢劫进入
//那么区别就是rob(i) = max{rob(i-2) + curhouse, rob(i-1)}
int[] dp = new int[nums.length + 1];
dp[1] = nums[0];
for (int i = 2; i < dp.length; ++i) {
dp[i] = Math.max(dp[i - 2] + nums[i - 1], dp[i - 1]);
} return dp[nums.length];
}
}
package y2019.Algorithm.dynamicprogramming.medium;

import java.util.List;

/**
* @ProjectName: cutter-point
* @Package: y2019.Algorithm.dynamicprogramming.medium
* @ClassName: WordBreak
* @Author: xiaof
* @Description: 139. Word Break
* Given a non-empty string s and a dictionary wordDict containing a list of non-empty words,
* determine if s can be segmented into a space-separated sequence of one or more dictionary words.
*
* Note:
*
* The same word in the dictionary may be reused multiple times in the segmentation.
* You may assume the dictionary does not contain duplicate words.
* Example 1:
*
* Input: s = "leetcode", wordDict = ["leet", "code"]
* Output: true
* Explanation: Return true because "leetcode" can be segmented as "leet code".
* Example 2:
*
* Input: s = "applepenapple", wordDict = ["apple", "pen"]
* Output: true
* Explanation: Return true because "applepenapple" can be segmented as "apple pen apple".
* Note that you are allowed to reuse a dictionary word.
* Example 3:
*
* Input: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
* Output: false
* @Date: 2019/8/16 8:46
* @Version: 1.0
*/
public class WordBreak { public boolean solution(String s, List<String> wordDict) {
//我们把s当做一个地址的字符数组,每次获取到一个新的字符的时候
//判断是否可以和字典匹配成功,如果成功那么当前位置的值就是true(任意一个字符串)
boolean[] dp = new boolean[s.length() + 1];
dp[0] = true; //如果字符串长度为0,那么默认为true for (int i = 1; i < dp.length; ++i) {
//遍历所有的字符,进行比较
for (String curs : wordDict) {
//比较当前字符位置
if (i >= curs.length()) {
//前面的字符也要比较确认没问题才能继续比较
if (dp[i - curs.length()]) {
//获取相同长度的字符进行比较,然后把前面剩下的字符再进行比较
String compare = s.substring(i - curs.length(), i);
if (compare.equals(curs)) {
dp[i] = true;
break;
}
}
}
} } return dp[s.length()];
}
}
package y2019.Algorithm.dynamicprogramming.medium;

/**
* @ProjectName: cutter-point
* @Package: y2019.Algorithm.dynamicprogramming.medium
* @ClassName: MaximalSquare
* @Author: xiaof
* @Description: 221. Maximal Square
* Given a 2D binary matrix filled with 0's and 1's, find the largest square(正方形) containing only 1's and return its area.
*
* Example:
*
* Input:
*
* 1 0 1 0 0
* 1 0 1 1 1
* 1 1 1 1 1
* 1 0 0 1 0
*
* Output: 4
* @Date: 2019/8/16 8:46
* @Version: 1.0
*/
public class MaximalSquare { public int solution(char[][] matrix) {
if (matrix == null || matrix.length == 0) {
return 0;
}
//这题可以转换为求边长,只有一个点的上面,左边,和左上角都是1的时候,才进行长度加1,如果有一个反向的值不为1,那么就无法进行加一
//这个二维数组用来求边长
int[][] dp = new int[matrix.length + 1][matrix[0].length + 1];
int maxlen = 0; for (int i = 1; i < dp.length; ++i) {
for (int j = 1; j < dp[i].length; ++j) {
//首先判断当前位置是否为空,如果是那么就判断边长能否添加
if (matrix[i - 1][j - 1] == '1') {
dp[i][j] = Math.min(dp[i-1][j], Math.min(dp[i][j-1], dp[i-1][j-1])) + 1;
maxlen = Math.max(maxlen, dp[i][j]);
}
}
} return maxlen * maxlen;
}
}

【LEETCODE】69、动态规划,easy,medium级别,题目:198、139、221的更多相关文章

  1. Leetcode之动态规划(DP)专题-198. 打家劫舍(House Robber)

    Leetcode之动态规划(DP)专题-198. 打家劫舍(House Robber) 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互 ...

  2. 【LEETCODE】68、动态规划,medium级别,题目:95、120、91

    package y2019.Algorithm.dynamicprogramming.medium; /** * @ProjectName: cutter-point * @Package: y201 ...

  3. [LeetCode] All questions numbers conclusion 所有题目题号

    Note: 后面数字n表明刷的第n + 1遍, 如果题目有**, 表明有待总结 Conclusion questions: [LeetCode] questions conclustion_BFS, ...

  4. Leetcode 69. Sqrt(x)及其扩展(有/无精度、二分法、牛顿法)详解

    Leetcode 69. Sqrt(x) Easy https://leetcode.com/problems/sqrtx/ Implement int sqrt(int x). Compute an ...

  5. [array] leetcode - 39. Combination Sum - Medium

    leetcode - 39. Combination Sum - Medium descrition Given a set of candidate numbers (C) (without dup ...

  6. leetcode笔记 动态规划在字符串匹配中的应用

    目录 leetcode笔记 动态规划在字符串匹配中的应用 0 参考文献 1. [10. Regular Expression Matching] 1.1 题目 1.2 思路 && 解题 ...

  7. Leetcode之动态规划(DP)专题-63. 不同路径 II(Unique Paths II)

    Leetcode之动态规划(DP)专题-63. 不同路径 II(Unique Paths II) 初级题目:Leetcode之动态规划(DP)专题-62. 不同路径(Unique Paths) 一个机 ...

  8. hdu 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】(转)

    HDU 动态规划(46道题目)倾情奉献~ [只提供思路与状态转移方程] Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955      背包 ...

  9. [array] leetcode - 48. Rotate Image - Medium

    leetcode - 48. Rotate Image - Medium descrition You are given an n x n 2D matrix representing an ima ...

随机推荐

  1. JavaScript map reduce

    23333333333333 map var s = []; for(let i=0;i<10;i++){ s.push(i); } function pow(x){ return x*x; } ...

  2. Java动态代理实现方式一

    Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理 实现方式一:静态代理 静态代理方式的优点 静态代理方式的缺点 Java动态代理实现方式一:InvocationHandler Ja ...

  3. [技术博客] 【vagrant】硬盘扩容

    同样,这也是少昂早年走过的坑,这里直接贴出少昂个人博客链接:https://www.cnblogs.com/HansBug/p/9447020.html PS:有一位经验丰富的后端大佬坐镇指挥是多么幸 ...

  4. DICOM worklist工作原理

    一.关于Worklist 在RIS与PACS的系统集成中.Wordlist的连接为其主要工作之一.Wordlist成像设备工作列表,它是DICOM协议中众多服务类别中的一个.它的功能是实现设备操作台与 ...

  5. leetcode 877. 石子游戏

    题目描述: 亚历克斯和李用几堆石子在做游戏.偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] . 游戏以谁手中的石子最多来决出胜负.石子的总数是奇数,所以没有平局. 亚历克斯和李轮流进行,亚 ...

  6. 根据motif binding来确定target gene | HOMER | FIMO | MEME

    主流的motif数据库 JASPAR dbcorrdb - SCENIC使用的 TRANSFAC® 7.0 Public 2005 and TRANSCompel 7.0 Public 2005 - ...

  7. LB中使用到的一致性Hash算法的简单实现

    1.类的Diagram 2.代码实现 2.1.Node类,每个Node代表集群里面的一个节点或者具体说是某一台物理机器: package consistencyhash; import lombok. ...

  8. Android 自己实现更新下载自动安装

    1.一些公司开发完一款App之后可能并不会去上架App商店,但事后期也需要定时进行维护更新,所以会选择把打包好的apk 发布到自己的服务器,然后在数据库建一个版本号的表,然后剩下的就交给你androi ...

  9. eggjs异常捕获机制

    1. try catch捕获异步链中的方法 2. ctx.runInBackground(scope)捕获跳出异步链的方法 // 旧代码 class HomeController extends Co ...

  10. 阶段一-01.万丈高楼,地基首要-第3章 用户登录注册模块开发-3-8 优化Swagger2显示

    左侧的全是英文 忽略api 把HelloController也忽略掉 重启api的服务,刷新页面.只剩下了passport的Controller 给passport接口加上注解. 重启服务,并刷新页面 ...