2021-08-21:给定一个数组arr,长度为N > 1,从中间切一刀,保证左部分和右部分都有数字,一共有N-1种切法,如此多的切法中,每一种都有:绝对值(左部分最大值 – 右部分最大值)。返回最大的绝对值是多少?
福大大 答案2021-08-21:
max-arr[0]和max-arr[N-1]取最大值。
时间复杂度:O(N)。
空间复杂度:O(1)。
代码用golang编写。代码如下:
package main import ( "fmt" "math" ) func main() { arr := []int{1, 2, 3} ret := maxABS3(arr) fmt.Println(ret) } func maxABS3(arr []int) int { max := math.MinInt64 for i := 0; i < len(arr); i++ { max = getMax(arr[i], max) } return max - getMin(arr[0], arr[len(arr)-1]) } func getMin(a int, b int) int { if a < b { return a } else { return b } } func getMax(a int, b int) int { if a > b { return a } else { return b } }
执行结果如下: