670. Maximum Swap

Given a non-negative integer, you could swap two digits at most once to get the maximum valued number. Return the maximum valued number you could get

旋转一个整数的两位数字 得到一个最大的数字

2736-> 7236

9973

思路:  从左找一个最小的数字, index越靠左越好, 之后找一个最大的数字, 在保证是最大的数字的前提下, 越靠右越好。

所有我们建立一张hash表 ,  key  是 0,1,2,3,4,5,6,7,8,9。    value 是出现的index  ,重复的情况下更新index ,这样我们就可以尽可能从右面得到这个最大的数字

 

之后从左往右扫, 找到最大的数并且index在左指针右面, 交换这两个数返回即可


//     //       2   7  3   6
             
    
//     1  2 3 4 5 6 7 8 9 
//                  1    
    public int maximumSwap(int num) {
        String s=String.valueOf(num);
        char[] array=s.toCharArray();
        
   int[] last=new int[10];
        for(int i=0;i<s.length();i++){
            last[s.charAt(i)-'0']=i;
        }
        
        for(int i=0;i<array.length;i++){
            for(int d=9;d>array[i]-'0';d--){
                if(last[d]>i){
                    char tmp=array[i];
                    array[i]=array[last[d]];
                    array[last[d]]=tmp;
                    return Integer.valueOf(new String(array));
                }
            }
            
            
        }
        
        return num;
        
    }
    

    
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值