• 爬楼梯:斐波那契数列

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

    每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

    注意:给定 n 是一个正整数。

  • 非递归解法

    class Solution {

    public int climbStairs(int n) {

    if (n==1) {

    return 1;

    }

    if (n==2) {

    return 2;

    }

    int n1=1,n2=2;

    for (int i = 0; i <n-2; i++) {

    int m=n1+n2;

    n1=n2;

    n2=m;

    }

    return n2;

    }

    }

  • 递归解法

    class Solution {

    int[] result=null;

    public int climbStairs(int n) {

    result=new int[n+1];

    Arrays.fill(result, -1);

    f(n);

    return result[n];

    }

    private void f(int X) {

    if (result[X]!=-1) {

    return;

    }

    if (X==0||X==1) {

    result[X]=1;

    return;

    }

    f(X-1);

    f(X-2);

    result[X]=result[X-1]+result[X-2];

    }

    }

  • 买卖股票的最佳时机

    重点是要设置一个最小值和一个最大值,并且不断替换!

    class Solution {

    public int maxProfit(int[] prices) {

    if (prices.length==0||prices.length==1) {

    return 0;

    }

    int minPrice=prices[0];

    int maxPrice=0;

    for (int i = 0; i < prices.length; i++) {

    if (prices[i]<=minPrice) {

    minPrice=prices[i];

    }else if ((prices[i]-minPrice)>maxPrice) {

    maxPrice=prices[i]-minPrice;

    }

    }

    return maxPrice;

    }

    }

  • 最大子序和

  • 超出时间限制的解法

    class Solution {

    public int maxSubArray(int[] nums) {

    if (nums.length==0) {

    return 0;

    }

    if (nums.length==1) {

    return nums[0];

    }

    int sum=0;

    Set<Integer> list=new TreeSet<>();

    int n=1;

    while (n<=nums.length) {

    for (int i = 0; i < nums.length-n+1; i++) {

    int m=0;

    for (int j = 0; j < n; j++) {

    m+=nums[i+j];

    }

    list.add(m);

    }

    n++;

    }

    int res=0;

    for (Iterator iterator = list.iterator(); iterator.hasNext();) {

    res= (Integer) iterator.next();

    }

    return res;

    }

    }

  • 优化解法

没想到可以这样解,厉害!找个例子试一试就懂了

class Solution {

public int maxSubArray(int[] nums)

{

if (nums.length==0) {

return 0;

}

if (nums.length==1) {

return nums[0];

}

int max=nums[0];

int sum=0;

for (int i = 0; i < nums.length; i++) {

if (sum>0) {

sum+=nums[i];

}else {

sum=nums[i];

}

max=Math.max(max, sum);

}

return max;

}

}

  • 更简单的解法:找最大子序列,最重要的要分清正负!!!

    class Solution {

    public int maxSubArray(int[] nums)

    {

    int max=nums[0];

    int sum=nums[0];

    for (int i = 1; i < nums.length; i++) {

    sum=Math.max(sum+nums[i], nums[i]);

    max=Math.max(max, sum);

    }

    return max;

    }

    }

  • 打家劫舍

挺难的,参考别人的解法,先记住

  • 递归法

    class Solution {

    //测试2,1,1,2

    private int[] memo;

    public int rob(int[] nums) {

    memo=new int[nums.length];

    Arrays.fill(memo, -1);

    return tryRob(nums, 0);

    }

    private int tryRob(int[] nums,int index) {

    if (index>=nums.length) {

    return 0;

    }

    if (memo[index]!=-1) {

    return memo[index];

    }

    int res=0;

    for (int i = index; i < nums.length; i++) {//循环每次后移,即可以跳过(相隔)两个或多个

    res=Math.max(res, nums[i]+tryRob(nums,i+2));

    }

    memo[index]=res;

    return res;

    }

    }

  • 动态规划

    class Solution {

    //测试2,1,1,2

    public int rob(int[] nums) {

    int n = nums.length;

    if (n == 0) {

    return 0;

    }

    if (n==1) {

    return nums[0];

    }

    if (n==2) {

    return Math.max(nums[0], nums[1]);

    }

    int[] f = new int[n];

    f[0]=nums[0];

    f[1]=Math.max(nums[0], nums[1]);//典型动态规划问题,先将子问题记录,然后

    for (int i = 2; i < f.length; i++) {

    f[i]=Math.max(f[i-2]+nums[i], f[i-1]);//这里利用子问题来解决问题

    }

    return f[n-1];

    }

    }

    参考:https://blog.csdn.net/likunkun__/article/details/80724683

算法练习LeetCode初级算法之动态规划的更多相关文章

  1. 【LeetCode算法】LeetCode初级算法——字符串

      在LeetCode初级算法的字符串专题中,共给出了九道题目,分别为:反转字符串,整数反转,字符串中的第一个唯一字符,有效的字母异位词,验证回文字符串,字符串转换整数,实现strStr(),报数,最 ...

  2. 算法练习LeetCode初级算法之链表

    删除链表中的节点 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode ne ...

  3. 算法练习LeetCode初级算法之字符串

    反转字符串 我的解法比较low,利用集合的工具类Collections.reverse反转,用时过长 class Solution { public void reverseString(char[] ...

  4. 算法练习LeetCode初级算法之数组

    删除数组中的重复项 官方解答: 旋转数组 存在重复元素 只出现一次的数     官方解答:  同一个字符进行两次异或运算就会回到原来的值 两个数组的交集 II import java.util.Arr ...

  5. 算法练习LeetCode初级算法之其他

    位1的个数 解法一: class Solution { // you need to treat n as an unsigned value public int hammingWeight(int ...

  6. 算法练习LeetCode初级算法之数学

    Fizz Buzz class Solution { public List<String> fizzBuzz(int n) { List<String> list=new L ...

  7. 算法练习LeetCode初级算法之设计问题

    打乱数组 不断的让第一个与后面随机选择的数交换 class Solution { private int[] nums; private int[] initnums; public Solution ...

  8. 算法练习LeetCode初级算法之排序和搜索

    合并两个有序数组 class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { System.arrayco ...

  9. 算法练习LeetCode初级算法之树

    二叉树的前序遍历 我的解法:利用递归,自底向下逐步添加到list,返回最终的前序遍历list class Solution { public List<Integer> preorderT ...

随机推荐

  1. iOS XML解析使用-韩国庆

    欢迎-------(北京-iOS移动开发金牌教师QQ:2592675215)韩老师给你带来XML解析课程 今天给大家讲解下xml解析的第三方简单用法:首先我解释下,json和xml解析格式. JSON ...

  2. Oracle中文排序问题

    默认感觉中文是按拼音排序,如果没实现效果,请加上其它排序,例如日期 表名为 dept ,其中name字段是中文,下面分别实现按照单位名称的笔划.部首和拼音排序.1: //按照笔划排序2: select ...

  3. spring boot 整合 云之讯 demo

    ---恢复内容开始--- package com.zhourong.controller; import org.apache.commons.lang3.RandomStringUtils; imp ...

  4. Jmeter5.1.1的汉化

    Jmeter的汉化: 在菜单导航栏,选择options-->choose language-->chinese(simplified)中文简体 默认打开汉化: 编辑jmeter.bat: ...

  5. python-day7-静态方法、类方法、属性方法、特殊成员方法、反射、异常处理、socket

    @特殊方法.异常处理.反射.socket @类 属性 实例变量 类变量 私有属性__var 方法 构造方法, 析构函数(python自带,不写也有,写了相当与重构) 私有方法 继承 继承 组合 @7. ...

  6. Echarts属性大全(及时更新最新信息)

    echarts属性的设置(完整大全)   // 全图默认背景  // backgroundColor: ‘rgba(0,0,0,0)’, // 默认色板 color: ['#ff7f50','#87c ...

  7. HTTP客户端识别与Cookie机制

    HTTP识别用户的几种技巧 承载用户身份信息的HTTP首部 客户端IP地址跟踪,通过用户的IP地址对其进行识别 用户登录,用认证方式识别用户 胖URL,一种在URL中潜入识别信息的技术 cookie, ...

  8. JavaScript学习-5——异步同步、回调函数

    ----------异步同步函数 ----------回调函数 一.异步同步函数 同步:发送一个请求,等待返回,然后再发送下一个请求 异步:发送一个请求,不等待返回,随时可以再发送下一个请求 同步可以 ...

  9. delphi:Exception EInvalidPointer in module Project1.exe

    在用delphi XE5编程时遇到如下问题: Exception EInvalidPointer in module Project1.exe at 00007595. Invalid pointer ...

  10. Netty从入门到精通到放弃

    有时间想记录一下关于Netty的知识. 第一课:传统IO的特点. package com.example.aimei.controller; import java.io.InputStream; i ...