补充题
作者:互联网
最大数
数组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