Java?C++?算法題解拓展leetcode670最大交換示例
更新時(shí)間:2022年09月14日 08:59:06 作者:AnjaVon
這篇文章主要介紹了Java?C++算法題解拓展leetcode670最大交換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
題目要求
思路:模擬
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)) // 嚴(yán)格大于 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; } }
- 時(shí)間復(fù)雜度:O(log ?num)
- 空間復(fù)雜度: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]) // 嚴(yán)格大于 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; } };
- 時(shí)間復(fù)雜度:O(log? num)
- 空間復(fù)雜度:O(log ?num)
Rust
- 這個(gè)部分代碼似乎有一點(diǎn)小問題【不用似乎就是有】……有就先有著吧……搞了半個(gè)小時(shí)也沒解決【擺爛】
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 } }
- 時(shí)間復(fù)雜度:O(log ?num)
- 空間復(fù)雜度:O(log? num)
以上就是Java C++算法題解拓展leetcode670最大交換示例的詳細(xì)內(nèi)容,更多關(guān)于Java C++算法最大交換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一文帶你搞懂C語言動(dòng)態(tài)內(nèi)存管理
動(dòng)態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存。本文將通過幾個(gè)示例帶大家深入了解一下C語言的動(dòng)態(tài)內(nèi)存管理,需要的可以參考一下2022-11-11C++算法之在無序數(shù)組中選擇第k小個(gè)數(shù)的實(shí)現(xiàn)方法
這篇文章主要介紹了C++算法之在無序數(shù)組中選擇第k小個(gè)數(shù)的實(shí)現(xiàn)方法,涉及C++數(shù)組的遍歷、判斷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2017-03-03c++雙向鏈表操作示例(創(chuàng)建雙向鏈、雙向鏈表中查找數(shù)據(jù)、插入數(shù)據(jù)等)
這篇文章主要介紹了c++雙向鏈表操作示例,包括創(chuàng)建雙向鏈、刪除雙向鏈表、雙向鏈表中查找數(shù)據(jù)、插入數(shù)據(jù)等,需要的朋友可以參考下2014-05-05