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

 更新时间:2022年09月14日 08:59:06   作者:AnjaVon  
这篇文章主要介绍了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

  • 这个部分代码似乎有一点小问题【不用似乎就是有】……有就先有着吧……搞了半个小时也没解决【摆烂】
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)

以上就是Java C++算法题解拓展leetcode670最大交换示例的详细内容,更多关于Java C++算法最大交换的资料请关注脚本之家其它相关文章!

相关文章

  • C语言类的基本语法详解

    C语言类的基本语法详解

    大家好,本篇文章主要讲的是C语言类的基本语法详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • C++设计模式迪米特法则实例

    C++设计模式迪米特法则实例

    这篇文章主要为大家详细介绍了C++设计模式迪米特法则实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • C语言深入讲解链表的使用

    C语言深入讲解链表的使用

    当我们在写一段代码时,如果要频繁的在一块区域进行插入或者删除操作时,会发现用数组实现会比较复杂,这时候我们就要用另一种数据结构,链表来实现
    2022-05-05
  • 深入探讨linux下进程的最大线程数、进程最大数、进程打开的文件数

    深入探讨linux下进程的最大线程数、进程最大数、进程打开的文件数

    本篇文章是对linux下进程的最大线程数、进程最大数、进程打开的文件数进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言数据结构不挂科指南之栈&队列&数组详解

    C语言数据结构不挂科指南之栈&队列&数组详解

    自考重点、期末考试必过指南,这篇文章让你理解什么是栈、什么是队列、什么是数组。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-09-09
  • C字符串函数对应的C++ string操作详解

    C字符串函数对应的C++ string操作详解

    在本篇文章里小编给大家整理的是一篇关于C字符串函数对应的C++ string操作知识点内容,有兴趣的朋友们学习下。
    2020-01-01
  • C语言实现拼图小游戏

    C语言实现拼图小游戏

    这篇文章主要为大家详细介绍了C语言实现拼图小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C++中String类常见题目分享

    C++中String类常见题目分享

    这篇文章主要为大家详细介绍了一些C++中String类的常见题目,文中的示例代码讲解详细,对我们掌握C++有一定的帮助,感兴趣的小伙伴可以了解一下
    2023-06-06
  • C语言驱动开发之内核通过PEB获取进程参数

    C语言驱动开发之内核通过PEB获取进程参数

    PEB结构(Process Envirorment Block Structure)其中文名是进程环境块信息。本文将通过PEB实现获取进程参数,感兴趣的小伙伴可以了解一下
    2022-10-10
  • C++使用模板实现单链表

    C++使用模板实现单链表

    这篇文章主要为大家详细介绍了C++使用模板实现单链表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12

最新评论