How to find the two largest elements in a slice with Go

1 Answer

0 votes
package main

import (
	"errors"
	"fmt"
	"math"
)

// findTwoLargest finds the largest and second-largest
// elements in a slice.
//
// Returns:
//   - largest element
//   - second-largest element
//   - error if the slice contains fewer than two elements
func findTwoLargest(numbers []int) (int, int, error) {
	if len(numbers) < 2 {
		return 0, 0, errors.New("slice must contain at least two elements")
	}

	largest := math.MinInt
	secondLargest := math.MinInt

	for _, value := range numbers {
		// Found a new largest value
		if value > largest {
			secondLargest = largest
			largest = value
		} else if value > secondLargest {
			// Update second largest if needed
			secondLargest = value
		}
	}

	return largest, secondLargest, nil
}

func main() {
	// Input data
	numbers := []int{3, 4, 9, 6, 7, 1, 2, 5}

	// Find the two largest elements
	largest, secondLargest, err := findTwoLargest(numbers)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	// Display results
	fmt.Println("Slice:", numbers)
	fmt.Println("Largest element:", largest)
	fmt.Println("Second largest element:", secondLargest)
}


/*
run:

Slice: [3 4 9 6 7 1 2 5]
Largest element: 9
Second largest element: 7

*/

 



answered 5 days ago by avibootz
...