最大连续乘积子串

/**
* 常规穷举法
*/
fun maxContinueProduce_fun1(intAttrs: MutableList): Double {
if (intAttrs==null || intAttrs.size<=0) { return 0.0 } var maxValue = intAttrs[0] var minIndex = 0 var maxIndex = 0 for (i in 0..intAttrs.size-1) { var value = intAttrs[i] for (j in i+1..intAttrs.size-1) { value = value * intAttrs[j] if (value>maxValue) {
maxValue = value
minIndex = i
maxIndex = j
}
}
}
println(“value:”+maxValue+”,min:”+minIndex+”,max:”+maxIndex)
return maxValue
}
/**
* 乘积可以为0,负数和正数
* 负数乘负数得正,也可能产生最大乘积
*/
fun maxContinueProduce_fun2(intAttrs: MutableList): Double{
if (intAttrs==null || intAttrs.size<=0) { return 0.0 } var maxProduce = 1.0 var minProduct = 1.0 var maxCurrent = maxProduce var minCurrent = minProduct var index = 0 var minindex = 0 // 找到最大乘积 已经最大index for (i in 0..intAttrs.size-1) { maxCurrent = intAttrs[i]*maxCurrent minCurrent = intAttrs[i]*minCurrent if (maxCurrent>maxProduce) {
maxProduce = maxCurrent
index = i
}
if (minCurrent>maxProduce) {
maxProduce = minCurrent
index = i
}
if (maxCurrent<minProduct) {
minProduct = maxCurrent
}
if (minCurrent<minProduct) { minProduct = minCurrent } if (minCurrent>maxCurrent) {
var temp = minCurrent
minCurrent = maxCurrent
maxCurrent = temp
}
if (maxCurrent<1) {
maxCurrent = 1.0
}
}

// 通过最大index和最大乘积计算最小index
var temp = 1.0
for (i in index downTo 0) {
temp *= intAttrs[i]
if (temp==maxProduce) {
minindex=i
break
}
}
println(“value:”+maxProduce+”,min:”+minindex+”,max:”+index)
return maxProduce
}

Leave a Reply

Your email address will not be published. Required fields are marked *