其他分享
首页 > 其他分享> > 补充题

补充题

作者:互联网

最大数

数组A中给定可以使用的1~9的数,返回由A数组中的元素组成的小于n的最大数。
例如A={1, 2, 4, 9},x=2533,返回2499

func main(){
    nums:=[]int{1,2,4,9}
	fmt.Println(getMax(nums,2533))

	fmt.Println(getMax([]int{9},2000))

	fmt.Println(getMax([]int{6,7,8},1200))
}


//num 选数,组合成小于target的最大数
func getMax(nums []int,target int)int{
	strs:=strconv.Itoa(target)
	sort.Ints(nums)
	flag:=false //标记是否已经取小于的数字
	imax:=nums[len(nums)-1]
	res:=0
	for i:=0;i<len(strs);i++{

		if flag {
			res = res*10 + imax
			continue
		}

		idx:=search(nums,int(strs[i]-'0'))
		if nums[idx]!=int(strs[i]-'0') { //不等于则左边为小于的值
			if idx-1 < 0 {
				//直接返回小于位数的数字
				for j := 1; j < len(strs); j++ {
					res = res*10 + imax
				}
				return res
			}
			res = res*10 + nums[idx-1]
			flag = true
		}else{
			res = res*10 + nums[idx] //有相等元素直接取
		}

	}
	return res
}

//返回小于等于的下标
func search(nums []int,target int)int{
	l,r:=0,len(nums)
	for l<r{
		mid:=l+(r-l)/2
		if nums[mid]<target{
			l = mid+1
		}else if nums[mid]>=target{
			r = mid
		}
	}
	return l
}

标签:target,最大数,nums,补充,fmt,int,getMax
来源: https://www.cnblogs.com/9527s/p/16351828.html