您的位置:首页 > 编程语言 > Go语言

算法:寻找数组的第二大的元素(不排序、只循环一次)

2015-01-15 23:10 471 查看
该算法的原理是,在遍历数组的时,始终记录当前最大的元素和第二大的元素。示例代码:

package demo01

import (
"fmt"
)

func NumberTestBase() {
fmt.Println("This is NumberTestBase")

nums := []int{12, 24, 2, 5, 13, 8, 7}
fmt.Println("nums:", nums)
secondMax := getSecondMaxNum(nums)
fmt.Println("secondMax=", secondMax)
}

func getSecondMaxNum(nums []int) int {
length := len(nums)
if length == 0 {
panic("Slice nums cannot be 0-size.")
}

if length == 1 {
return nums[0]
}

var max, secondMax int
if nums[0] > nums[1] {
max = nums[0]
secondMax = nums[1]
} else {
max = nums[1]
secondMax = nums[0]
}

for i := 2; i < len(nums); i++ {
if nums[i] > secondMax {
if nums[i] <= max {
secondMax = nums[i]
} else {
secondMax, max = max, nums[i]
}
}
}
return secondMax
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  go语言 算法
相关文章推荐