• 补充题


    最大数

    数组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
    }
    
    

    类似498对角线遍历(不同点在于是从左下朝右上角一个方向遍历,不需要更换方向,实现如下)

    import "fmt"
    
    //矩阵单个方向遍历,从左下向右上角.
    
    func find(matrix [][]int)[]int{
    	res:=[]int{}
    	m,n:=len(matrix),len(matrix[0])
    
    	//上半部分
    	for i:=0;i<m;i++{
    		col:=0
    		for j:=i;j>=0;j--{ //x轴到0才停止
    			res = append(res,matrix[j][col])
    			col++
    		}
    	}
    
    	//下半部分,比上半部分少1,并且y从1开始
    	for i:=1;i<n;i++{
    		row:=m-1 //行
    
    		for j:=i;j<n&&row>=0;j++{ //y轴到末尾才停止,row越界也要停止
    			res = append(res,matrix[row][j])
    			row--
    		}
    	}
    
    	return res
    }
    
    func main(){
        nums:=[][]int{
        	{1,2,3},
        	{4,5,6},
        	{7,8,9},
    	}
    
    	arr:=[][]int{
    		{1,2,3,4,1,3},
    		{5,6,7,8,4,5},
    		{9,1,2,3,7,8},
    	}
    
    	fmt.Println(find(nums))
    
    	fmt.Println(find(arr))
    }
    
  • 相关阅读:
    09、AppBarControl
    15、ScrollViewerSample
    11、DataBinding
    18、Compression
    关于创建oracle dblink 过程的几点心得吧
    教你如何玩转DK血
    DK需要知道的事
    Displaying Dynamic KML with ASP.NET
    WLK:裁缝/附魔350450速冲攻略
    WLK狂暴,防御战士的一点心得.
  • 原文地址:https://www.cnblogs.com/9527s/p/16351828.html
Copyright © 2020-2023  润新知