暴力解法
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,加油,打工人!