数据结构:连续子数组的最大和(附头条面试题)
Posted 咕泡研习社
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构:连续子数组的最大和(附头条面试题)相关的知识,希望对你有一定的参考价值。
题目描述
分析
暴力解法
一般解法
示例代码如下:
package com.example.demo;
public class Test5 {
public static void main(String[] args) {
int[] arr = new int[]{6,-3,-2,7,-15,1,2,2};
System.out.println(getMax( arr));
}
public static int getMax(int[] arr){
if(null == arr || arr.length <= 0){
return 0;
}
int maxNum= arr[0];
int currSum = arr[0];
for(int i = 1; i<arr.length; i++){
if(currSum > 0){
currSum += arr[i];
}else{
currSum = arr[i];
}
if(currSum > maxNum){
maxNum = currSum;
}
}
return maxNum;
}
}
动态规划,其实跟上面是一样的
max( dp[ i ] ) = getMax( max( dp[ i -1 ] ) + arr[ i ] ,arr[ i ] )
package com.example.demo;
public class Test6 {
public static void main(String[] args) {
int[] arr = new int[]{6,-3,-2,7,-15,1,2,2};
System.out.println(getMax( arr));
}
public static int getMax(int[] arr){
if(null == arr || arr.length <= 0){
return 0;
}
int maxNum= arr[0];
int[] currSumArr = new int[arr.length];
currSumArr[0] = arr[0];
for(int i = 1; i<arr.length; i++){
if(currSumArr[i-1] > 0){
currSumArr[i] = currSumArr[i-1] + arr[i];
}else{
currSumArr[i] = arr[i];
}
if(currSumArr[i] > maxNum){
maxNum = currSumArr[i];
}
}
return maxNum;
}
}
扩展
头条面试问题
例如:
2019-07-08 12:30:00 - 2019-07-08 13:30:00
2019-07-08 12:00:00 - 2019-07-08 14:30:00
2019-07-08 12:10:00 - 2019-07-08 14:10:00
……
思路:
时间复杂度为o(n)
推荐阅读:
升职加薪 就来咕泡学院
欢迎加入研习社专属福利群
享受福利第一时间送达的特权
以上是关于数据结构:连续子数组的最大和(附头条面试题)的主要内容,如果未能解决你的问题,请参考以下文章