2022-04-11:给定一个正数数组arr,其中每个值代表砖块长度

2022-04-11 23:11:10 浏览数 (1)

2022-04-11:给定一个正数数组arr,其中每个值代表砖块长度,

所有砖块等高等宽,只有长度有区别,

每一层可以用1块或者2块砖来摆,

要求每一层的长度一样,

要求必须使用所有的砖块,

请问最多摆几层。

来自华为。

答案2022-04-11:

双指针,先排序。

情况一:最大的单独一层。

情况二:最大的需要组合。

代码用golang编写。代码如下:

代码语言:go复制
package main

import (
	"fmt"
	"sort"
)

func main() {
	arr := []int{50, 50, 100}
	ret := maxLevels(arr)
	fmt.Println(ret)
}

func maxLevels(arr []int) int {
	if len(arr) == 0 {
		return 0
	}
	n := len(arr)
	if n < 2 {
		return n
	}
	sort.Ints(arr)
	p1 := levels(arr, arr[n-1])
	p2 := levels(arr, arr[n-1] arr[0])
	return getMax(p1, p2)
}

// 要求所有砖必须都使用,并且每一层最多两块砖,并且每一层长度都是len
// 返回能摆几层,如果无法做到返回-1
func levels(arr []int, len0 int) int {
	ans := 0
	L := 0
	R := len(arr) - 1
	for L <= R {
		if arr[R] == len0 {
			R--
			ans  
		} else if L < R && arr[L] arr[R] == len0 {
			L  
			R--
			ans  
		} else {
			return -1
		}
	}
	return ans
}

func getMax(a, b int) int {
	if a > b {
		return a
	} else {
		return b
	}
}

执行结果如下:

在这里插入图片描述在这里插入图片描述

左神java代码

0 人点赞