00.求得到最大的价值

一条街上有N个房子,每个房子里有一些值钱的东西。一个小偷计划去这条街上偷盗,但是考虑到不被迅速抓到,小偷不能偷连续的两个房子。请编码一个function,计算出小偷能偷盗的最大物品价值。

输入为一个N的数组,数组的每一位数字代表了一个房子里东西的价值。

values[]=[9, 3, 5, 8, 2, 4, 7]

返回 24 (偷第一个,第四个,第七个房子得到的价值)

 public static int getResult(int index,int[] data){
        if(index>=data.length) return 0;
        int maxValue = data[index];
        int i = index+2;
        //向前走一步,如果可以走则加到value
        int maxValue2 = 0;
        if(i<data.length){
            maxValue +=getResult(i,data);
        }
        //平行走一步
        if(index+1<data.length){
            maxValue2+=getResult(index+1,data);
        }
        maxValue = maxValue>maxValue2?maxValue:maxValue2;
        return maxValue;
    }



    public static void main(String []args){
        int[] data = new int[]{9,8,0,9,8};
        int result = getResult(0,data);
        System.out.println(result);
    }

 

  public static int doIt(int n, int[] values, int left) {
        if (n == 0) return 0;
        if (n == 1) return values[left];
        if (n == 2) return Math.max(values[left], values[left + 1]);
        int yes = values[left] + doIt((n - 2), values, left + 2);
        int no = doIt((n - 1), values, left + 1);
        return Math.max(yes, no);
    }

 

posted @ 2019-09-27 15:05  byebai95  阅读(272)  评论(0编辑  收藏  举报