ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

leetcode 670.最大交换

2022-09-13 20:01:35  阅读:217  来源: 互联网

标签:index 数字 int 670 交换 bits leetcode string


670. 最大交换
难度
中等

342

 

 

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。

示例 1 :

输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :

输入: 9973
输出: 9973
解释: 不需要交换。
注意:

给定数字的范围是 [0, 108]

 

思路:

尽量将大的数字交换到高位置上去并且在存在相同的大的数字在不同位置上,交换低位置上的大数

 

贪心+预处理的魅力

我们首先遍历该数的每一位 注意从后往前遍历 建立index数组保存该位右侧的最大数字所在的位置

然后从前往后遍历遇到自身后面最大数字所在位置的字符与自己不同时,交换并退出

int 转string  to_string(int i)

string转int  atoi(s.c_str());

class Solution {
public:
    int maximumSwap(int num) {
       //一个非负整数 交换数字中的任意两位得到能得到的最大值
       //常规思路:将大的数字尽可能交换到高位去  排序?还是直接暴力检索
       string bits=to_string(num);
       vector<int> index(bits.size());
       index[bits.size()-1]=bits.size()-1;
       for(int i=bits.size()-2;i>=0;i--){
            if(bits[i]>bits[index[i+1]]) index[i]=i;
            else index[i]=index[i+1];
       }
       for(int i=0;i<bits.size();i++){
           if(bits[index[i]]!=bits[i]) {
               swap(bits[index[i]],bits[i]);
               break;
           }           
       }
       return atoi(bits.c_str());
    }
};

 

标签:index,数字,int,670,交换,bits,leetcode,string
来源: https://www.cnblogs.com/TrenmenHu/p/16690570.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有