題目看截圖
算法如下
package main
import (
"fmt"
"sort"
)
func jz(arr [][]int) int{
sum:=0;
l := len(arr)
for i:=0;i<l;{
// 這裏利用sort.Ints對數組進行由小到大排序
sort.Ints(arr[i])
if i==0 {
sum+=arr[i][0]
}
if i+1<l && i+2<l {
//判斷從當前指針位置,向後數1 和數2兩個位置數字的大小,選擇較小的
sort.Ints(arr[i+1])
sort.Ints(arr[i+2])
if arr[i+1][0]<arr[i+2][0] {
sum+=arr[i+1][0]
i+=2
}else{
sum+=arr[i+2][0]
i+=3
}
}else if i+1<l{
//臨界值處理,此時的i+2已經越界 不能選擇直接使用最後一個值就可以了
sort.Ints(arr[i+1])
sum+=arr[i+1][0]
i++
break
}else{
//臨界值處理
sort.Ints(arr[i])
sum+=arr[i][0]
i++
}
}
return sum
}
func main() {
//矩陣聲明5x5
arr:=[][]int{
{3,0,-2,4,0},
{-1,2,-2,1,4},
{3,1,-2,-3,3},
{2,-4,-3,-3,2,},
{5,2,-2,-3,1},
}
fmt.Println(arr)
a:=jz(arr)
fmt.Println("總數",a)
}