670. 最大交换-贪心
Posted hequnwang10
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了670. 最大交换-贪心相关的知识,希望对你有一定的参考价值。
一、题目描述
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1:
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2:
输入: 9973
输出: 9973
解释: 不需要交换。
二、解题
贪心算法
0-9总共10个数,所以先将数字转为字符串数组,记录每个数字的最远下标,然后从9开始遍历,与字符串数组比较,判断下标数组是否存在9,然后比较9所在的下标是否大于当前字符串的下标,若大于直接交换,本题只允许最多交换一次。
class Solution
public int maximumSwap(int num)
//贪心算法
char[] charnum = String.valueOf(num).toCharArray();
int length = charnum.length;
//0-9 总共十个数
int[] indexlast = new int[10];
for(int i = 0;i<length;i++)
indexlast[charnum[i]-'0'] = i;
//开始遍历字符串
for(int i = 0;i<length;i++)
//从最大值9开始往前遍历 如果9大于当前字符串数组的值,则交换两个位置
for(int j = 9;j > charnum[i]-'0';j--)
if(indexlast[j] > i)
//i是当前字符串的下标,indexlast[j]表示最大值在字符串中的下标
swap(charnum,i,indexlast[j]);
return Integer.valueOf(new String(charnum));
return num;
public void swap(char[] charnum,int left,int right)
char temp = charnum[left];
charnum[left] = charnum[right];
charnum[right] = temp;
时间复杂度:O(n);
空间复杂度:O(1)。
以上是关于670. 最大交换-贪心的主要内容,如果未能解决你的问题,请参考以下文章