试题
考点

算法-动态规划算法-动态规划算法

面5笔5

求出数组A中互不相邻的数的最大和。如数组A=[1,2,4,1,7,8,3]

前往“校招VIP”小程序,刷题更快
最新校招难题刷题,快来进刷题群吧
解答

发现从0开始推导不出结果,只能取一个一般状态,如果现在是第i个位置,f(i)表现在i位置的最大和。自然就转化为动态规划问题。

推导出中间状态公式:max(dp[i-2]+num[i],dp[i-1])

* 递归解法
             * @param arr
             * @param i
             * @return
             */
          public static int rec_opt(int[] arr, int i) {
                       if(i == 0)
                                  return arr[0];
                       else if (i == 1)
                                  return Math.max(arr[0], arr[1]);
                       else {
                                  int a = rec_opt(arr, i-2) + arr[i];
                                  int b = rec_opt(arr, i-1);
                                  return Math.max(a, b);
                                  }
}

/**
 * 动态规划解法
 * @param arr
 * @return
 */
public static int dp_opt(int[] arr) {
             int[] opt = new int[arr.length];
             opt[0] = arr[0];
             opt[1] = Math.max(arr[0], arr[1]);
             for(int i=2; i<arr.length; i++) {
                        int a = opt[i-2] + arr[i];
                        int b = opt[i-1];
                        opt[i] = Math.max(a, b);
             }
             return opt[arr.length-1];
}

评论

禾下乘凉

2021-06-26 09:38:05

0 0

赫本

2020-12-05 12:38:54

0 0

往事四块七毛五

2020-08-18 12:34:13

0 0

五分i

2020-08-18 10:44:30

0 0

HaterGone

2020-08-18 10:35:06

0 0

加载更多