20181027_ARTS_W4

Algorithm

746. Min Cost Climbing Stairs
按tag刷题,这是一道典型的dp题目。

class Solution {
    /**
    *1.这道题是一道很简单的dp题; 但是例1应该是错误的,应该是直接选择cost[0]=10,然后跳两步
    *其实是没错的,这里的top指的是达到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的一篇关于微服务架构的文档

Microservices.png

Tip

学习了一个设计模式:策略模式。
策略模式是对不同算法的包装,具体使用哪个算法是由使用方决定的。


策略模式UML图.png
  • 策略接口(其实也可以是抽象类)
public interface Strategy {
    void strategyInterface();
}
  • 策略接口具体实现类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();
    }
}

具体代码如上,项目使用场景:当几个类的多数方法相同,只有某个方法不大一样时就可以使用了,写一个公共抽象类:相同方法写在抽象类中,不同的方法抽象出来由策略实现类实现即可

Share

  1. 技术:这周在看java juc里面的AQS类,一开始直接硬着头皮看,发现完全看不懂想要放弃;不过马上借助google参考了别人的思路,然后结合源码整理出自己的思路就基本理解了,所以有时候站在别人的肩膀上是能加速自己的理解的,就像有耗叔的攻略可以指引自己找到解决问题的思路,然后一步一步自己总结转换为自己的东西。
    还有一个很重要的读源码的技巧就是自己写demo debug,加速理解
  2. 工作:危机感,不知不觉也工作一年半了,发现成长并没有达到自己的预期,程序员30岁/35岁的危机感听起来会让人很彷徨;但是于我而言,我总是会往好的方面去想,把这种危机感当成自己学习的动力也不错。真的就是入耗叔所说,你只要比别人多坚持一点点就超越了99%的人,比如坚持arts.
  3. 生活:最近两周都在看lol的世界总决赛,过得有点颓废,整个人也感觉不好,有对比就知道其实周末就应该充充电或者出去浪一浪才能让人精神更好一点。另外,健身这件事一定要坚持

By X
2018.10.29

你可能感兴趣的:(20181027_ARTS_W4)