数组670. 最大交换
Posted ocpc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组670. 最大交换相关的知识,希望对你有一定的参考价值。
题目:
解答:
1 先将数每一位拆成数组
2,若数组为非升序序列,则直接返回原数即可
3,否则,就找到数组中第一次出现升序的位置,从该位置往后找到最后一个最大值max_val及其下标max_ind
4,从数组头开始找第一个比max_val小的数的下标i,交换i与max_ind位置的数即可
1 class Solution { 2 public: 3 int maximumSwap(int num) 4 { 5 string nums = to_string(num); 6 int i = 1; 7 int N = nums.size(); 8 while (i < N && nums[i] <= nums[i - 1]) 9 { 10 ++i; 11 } 12 if (i == N) 13 { 14 return num; 15 } 16 17 char max_val = nums[i]; 18 int max_ind = i; 19 for (; i < N; ++i) 20 { 21 if (nums[i] >= max_val) 22 { 23 max_val = nums[i]; 24 max_ind = i; 25 } 26 } 27 for (i = 0; i < N; ++i) 28 { 29 if (nums[i] < max_val) 30 { 31 break; 32 } 33 } 34 swap(nums[i], nums[max_ind]); 35 int res = 0; 36 res = atoi(nums.c_str()); 37 return res; 38 } 39 };
以上是关于数组670. 最大交换的主要内容,如果未能解决你的问题,请参考以下文章