Java C++ 算法题解拓展leetcode670最大交换示例

作者:AnjaVon 时间:2022-05-18 23:31:51 

题目要求

Java C++ 算法题解拓展leetcode670最大交换示例

思路:模拟

Java

class Solution {
   public int maximumSwap(int num) {
       List<Integer> list = new ArrayList<>();
       while (num != 0) {
           list.add(num % 10);
           num /= 10;
       }
       int n = list.size(), res = 0;
       int[] idx = new int[n];
       for (int i = 0, j = 0; i < n; i++) {
           if (list.get(i) > list.get(j)) // 严格大于
               j = i;
           idx[i] = j;
       }
       for (int i = n - 1; i >= 0; i--) { // 高位开始
           if (list.get(idx[i]) != list.get(i)) {
               int tmp = list.get(idx[i]);
               list.set(idx[i], list.get(i));
               list.set(i, tmp);
               break;
           }
       }
       for (int i = n - 1; i >= 0; i--)
           res = res * 10 + list.get(i);
       return res;
   }
}
  • 时间复杂度:O(log ⁡num)

  • 空间复杂度:O(log ⁡num)

C++

class Solution {
public:
   int maximumSwap(int num) {
       vector<int> list;
       while (num != 0) {
           list.emplace_back(num % 10);
           num /= 10;
       }
       int n = list.size(), res = 0;
       int idx[n];
       for (int i = 0, j = 0; i < n; i++) {
           if (list[i] > list[j]) // 严格大于
               j = i;
           idx[i] = j;
       }
       for (int i = n - 1; i >= 0; i--) { // 高位开始
           if (list[idx[i]] != list[i]) {
               int tmp = list[idx[i]];
               list[idx[i]] =list[i];
               list[i] = tmp;
               break;
           }
       }
       for (int i = n - 1; i>= 0; i--)
           res = res * 10 + list[i];
       return res;
   }
};
  • 时间复杂度:O(log⁡ num)

  • 空间复杂度:O(log ⁡num)

Rust

  • 这个部分代码似乎有一点小问题【不用似乎就是有】&hellip;&hellip;有就先有着吧&hellip;&hellip;搞了半个小时也没解决【摆烂】

impl Solution {
   pub fn maximum_swap(num: i32) -> i32 {
       let mut list = vec![];
       let mut res = num;
       while (res != 0) {
           list.push(res % 10);
           res /= 10;
       }
       let n = list.len();
       let mut idx = vec![0; n];
       let mut j = 0;
       for i in 0..n {
           if list[i] > list[j] {
               j = i;
           }
           idx[i] = j;
       }
       for k in n-1..0 {
           if list[idx[k]] != list[k] {
               list.swap(idx[k], k);
               break;
           }
       }
       for l in n-1..0 {
           res = res * 10 + list[l];
       }
       res
   }
}
  • 时间复杂度:O(log ⁡num)

  • 空间复杂度:O(log⁡ num)

来源:https://juejin.cn/post/7142875009252818975

标签:Java,C++,算法,题解,最大交换
0
投稿

猜你喜欢

  • 详解Spring Bean的配置方式与实例化

    2022-01-13 05:47:51
  • JavaWeb文件上传下载功能示例解析

    2021-09-20 08:28:58
  • Java多线程编程小实例模拟停车场系统

    2022-07-07 06:36:29
  • Android开发笔记之:深入理解Cursor相关的性能问题

    2021-10-31 15:06:49
  • c#高效率导出多维表头excel的实例代码

    2022-10-17 04:45:49
  • Java基于正则实现的日期校验功能示例

    2021-09-30 02:43:26
  • Flink开发IDEA环境搭建与测试的方法

    2023-02-21 21:20:46
  • 解读maven配置阿里云镜像问题

    2023-02-28 11:57:56
  • Java数据类型的全面剖析

    2022-07-09 06:51:38
  • Java集合的总体框架相关知识总结

    2021-06-25 10:43:36
  • Java设计模式之动态代理模式实例分析

    2022-07-07 17:55:07
  • Android 获取屏幕尺寸实例代码

    2023-07-26 21:50:47
  • java采用中文方式显示时间的方法

    2021-07-24 03:04:34
  • 详解配置spring-boot-actuator时候遇到的一些小问题

    2022-03-17 17:04:08
  • C#图片按比例缩放的实现代码

    2022-12-19 03:58:16
  • Java Durid进行JDBC连接详解

    2022-09-25 02:35:12
  • 教你怎么用Idea打包jar包

    2023-03-15 03:30:51
  • Flutter Recovering Stream Errors小技巧

    2023-09-02 05:02:17
  • 深入理解strcpy与memcpy的区别

    2023-02-23 21:45:32
  • java实现动态 代理方法浅析

    2023-11-28 23:33:59
  • asp之家 软件编程 m.aspxhome.com