java动态规划算法

暴力解法

class Solution {

//暴力递归解法

public int fib(int n) {

//base case

if(n0||n1) return n;

return fib(n-1)+fib(n-2);

}

}

递归算法的时间复杂度=递归的次数x递归函数本身的时间复杂度

带备忘录的递归算法

class Solution {

//带备忘录的递归算法

pu

必看视频!获取2024年最新Java开发全套学习资料 备注Java

blic int fib(int n) {

//备忘录全部初始化为0

int [] memo=new int [n+1];

//进行备忘录的递归

return helper(memo,n);

}

private int helper(int []memo,int n){

//base case

if(n0||n1){

return n;

}

//已经记录过就不用在计算了

if(memo[n]!=0){

return memo[n];

}

memo[n]=(helper(memo,n-1)+helper(memo,n-2))%1000000007;

return memo[n];

}

}

自底向上的dp数组迭代解法

class Solution {

//自底向上的递归数组迭代dp法

public int fib(int n) {

if(n0||n1) return n;

int []dp =new int [n+1];

//base case

dp[0]=0;dp[1]=1;

//状态转移

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

dp[i]=(dp[i-1]+dp[i-2])%1000000007;

}

return dp[n];

}

}

优化空间复杂度

class Solution {

//优化空间复杂度

public int fib(int n) {

//base case

if(n0||n1) return n;

int pre=0,curr=1;

int sum;

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

sum=(pre+curr)%1000000007;

pre=curr;

curr=sum;

}

return curr;

}

}

零钱兑换问题

在这里插入图片描述

暴力递归算法

class Solution {

//暴力递归解法

//状态:目标金额amount

//选择:coins数组中列出的所有硬币面额

//函数的定义:凑出总金额amount,至少需要coinChage(coins,amount)枚硬币

//base case:amount<0时不可能凑出,amount==0时需要0枚硬币

public int coinChange(int[] coins, int amount) {

//base case

if(amount==0) return 0;

if(amount<0) return -1;

int res=Integer.Max_VALUE;

for(int coin: coins){

//计算子问题的结果

int subRes=coinChange(coins,amount-coin);

if(subRes==-1) continue;

//在子问题中选择最优解,然后加1

res=Math.min(res,subRes+1);

}

return res==Integer.Max_VALUE?-1:res;

}

}

自顶向下递归–备忘录解法

class Solution {

//备忘录

//状态:目标金额amount

//选择:coins数组中列出的所有硬币面额

//函数的定义:凑出总金额amount,至少需要coinChage(coins,amount)枚硬币

//base case:amount<0时不可能凑出,amount==0时需要0枚硬币

总结

我个人认为,如果你想靠着背面试题来获得心仪的offer,用癞蛤蟆想吃天鹅肉形容完全不过分。想必大家能感受到面试越来越难,想找到心仪的工作也是越来越难,高薪工作羡慕不来,却又对自己目前的薪资不太满意,工作几年甚至连一个应届生的薪资都比不上,终究是错付了,错付了自己没有去提升技术。

这些面试题分享给大家的目的,其实是希望大家通过大厂面试题分析自己的技术栈,给自己梳理一个更加明确的学习方向,当你准备好去面试大厂,你心里有底,大概知道面试官会问多广,多深,避免面试的时候一问三不知。

大家可以把Java基础,JVM,并发编程,MySQL,Redis,Spring,Spring cloud等等做一个知识总结以及延伸,再去进行操作,不然光记是学不会的,这里我也提供一些脑图分享给大家:

希望你看完这篇文章后,不要犹豫,抓紧学习,复习知识,准备在明年的金三银四拿到心仪的offer,加油,打工人!
候一问三不知。

大家可以把Java基础,JVM,并发编程,MySQL,Redis,Spring,Spring cloud等等做一个知识总结以及延伸,再去进行操作,不然光记是学不会的,这里我也提供一些脑图分享给大家:

[外链图片转存中…(img-OLVtOpnb-1716454901168)]

[外链图片转存中…(img-YLn9FiFB-1716454901169)]

[外链图片转存中…(img-aRdh3lTG-1716454901169)]

希望你看完这篇文章后,不要犹豫,抓紧学习,复习知识,准备在明年的金三银四拿到心仪的offer,加油,打工人!

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值