Algorithm
746. Min Cost Climbing Stairs
按tag刷題原叮,這是一道典型的dp題目厢拭。
class Solution {
/**
*1.這道題是一道很簡(jiǎn)單的dp題; 但是例1應(yīng)該是錯(cuò)誤的,應(yīng)該是直接選擇cost[0]=10,然后跳兩步
*其實(shí)是沒錯(cuò)的,這里的top指的是達(dá)到cost[cost.length],而不是cost[cost.length-1]
*/
public int minCostClimbingStairs(int[] cost) {
if(cost == null || cost.length <= 2){
return 0;
}
//initialize pre=dp[0],cur=dp[1]
int pre = 0, cur = 0;
for(int i=2;i<=cost.length;i++){
int temp = Math.min(pre+cost[i-2],cur+cost[i-1]);
pre = cur;
cur = temp;
}
return cur;
}
}
Review
https://martinfowler.com/articles/microservices.html
Martin Fowler的一篇關(guān)于微服務(wù)架構(gòu)的文檔
Microservices.png
Tip
學(xué)習(xí)了一個(gè)設(shè)計(jì)模式:策略模式。
策略模式是對(duì)不同算法的包裝,具體使用哪個(gè)算法是由使用方?jīng)Q定的史煎。
策略模式UML圖.png
- 策略接口(其實(shí)也可以是抽象類)
public interface Strategy {
void strategyInterface();
}
- 策略接口具體實(shí)現(xiàn)類A/B/C
public class ConcreteStrategyA implements Strategy {
@Override
public void strategyInterface() {
System.out.println("strategy A");
}
}
public class ConcreteStrategyB implements Strategy {
@Override
public void strategyInterface() {
System.out.println("strategy B");
}
}
public class ConcreteStrategyC implements Strategy {
@Override
public void strategyInterface() {
System.out.println("strategy C");
}
}
- 策略算法使用類
public class Context {
//如果是spring則可以直接采用@Autowired @Qualifier注入
private Strategy strategy;
public void setStrategy(Strategy strategy){
this.strategy = strategy;
}
public void strategyInterface(){
strategy.strategyInterface();
}
}
- 客戶端使用
public class ClientSample {
public static void main(String[] args) {
Strategy strategy = new ConcreteStrategyB();
Context context = new Context();
context.setStrategy(strategy);
context.strategyInterface();
}
}
具體代碼如上谦屑,項(xiàng)目使用場(chǎng)景:當(dāng)幾個(gè)類的多數(shù)方法相同,只有某個(gè)方法不大一樣時(shí)就可以使用了篇梭,寫一個(gè)公共抽象類:相同方法寫在抽象類中氢橙,不同的方法抽象出來(lái)由策略實(shí)現(xiàn)類實(shí)現(xiàn)即可
Share
- 技術(shù):這周在看java juc里面的AQS類,一開始直接硬著頭皮看恬偷,發(fā)現(xiàn)完全看不懂想要放棄悍手;不過(guò)馬上借助google參考了別人的思路,然后結(jié)合源碼整理出自己的思路就基本理解了袍患,所以有時(shí)候站在別人的肩膀上是能加速自己的理解的坦康,就像有耗叔的攻略可以指引自己找到解決問(wèn)題的思路,然后一步一步自己總結(jié)轉(zhuǎn)換為自己的東西诡延。
還有一個(gè)很重要的讀源碼的技巧就是自己寫demo debug滞欠,加速理解 - 工作:危機(jī)感,不知不覺也工作一年半了肆良,發(fā)現(xiàn)成長(zhǎng)并沒有達(dá)到自己的預(yù)期筛璧,程序員30歲/35歲的危機(jī)感聽起來(lái)會(huì)讓人很彷徨;但是于我而言妖滔,我總是會(huì)往好的方面去想隧哮,把這種危機(jī)感當(dāng)成自己學(xué)習(xí)的動(dòng)力也不錯(cuò)桶良。真的就是入耗叔所說(shuō)座舍,你只要比別人多堅(jiān)持一點(diǎn)點(diǎn)就超越了99%的人,比如堅(jiān)持arts.
- 生活:最近兩周都在看lol的世界總決賽陨帆,過(guò)得有點(diǎn)頹廢曲秉,整個(gè)人也感覺不好,有對(duì)比就知道其實(shí)周末就應(yīng)該充充電或者出去浪一浪才能讓人精神更好一點(diǎn)疲牵。另外承二,健身這件事一定要堅(jiān)持
By X
2018.10.29