ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่หาจำนวนที่มากที่สุดด้วยการแลกเปลี่ยนเพียงครั้งเดียวที่น้อยกว่าจำนวนที่กำหนด n
มาดูขั้นตอนการแก้ปัญหากัน
- เริ่มต้นหมายเลข n.
- วนซ้ำจากจุดสิ้นสุดของสตริงและค้นหาดัชนีของตัวเลขที่มากกว่าหลักถัดไป เก็บไว้ในตัวแปร
- เลิกวนซ้ำทันทีที่คุณพบมัน
- วนซ้ำตัวเลขจากจุดสิ้นสุดของสตริงไปยังดัชนีด้านบน
- ค้นหาดัชนีของตัวเลขซึ่งน้อยกว่าหลักที่จัดทำดัชนีด้านบนและมากกว่าทั้งหมดในพื้นที่
-
สลับตัวเลขที่ดัชนีทั้งสองด้านบน ส่งคืนหมายเลขที่อัปเดต
ตัวอย่าง
มาดูโค้ดกันเลย
#include <bits/stdc++.h>
using namespace std;
string getTheNumber(string str) {
int length = str.length();
int index = -1;
for (int i = length - 2; i >= 0; i--) {
if (str[i] > str[i+1]) {
index = i;
break;
}
}
int smallerDigitIndex = -1;
for (int i = length - 1; i > index; i--) {
if (str[i] < str[index]) {
if (smallerDigitIndex == -1 || str[i] >= str[smallerDigitIndex]) {
smallerDigitIndex = i;
}
}
}
if (index == -1) {
return "-1";
}
if (smallerDigitIndex != -1) {
swap(str[index], str[smallerDigitIndex]);
return str;
}
return "-1";
}
int main() {
string str = "54624";
cout << getTheNumber(str) << endl;
return 0;
} ผลลัพธ์
หากคุณเรียกใช้โค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้
54426
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น