社区讨论

大佬求调!!!

P1106删数问题参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mlq9cs92
此快照首次捕获于
2026/02/17 15:04
前天
此快照最后确认于
2026/02/18 13:32
昨天
查看原帖
才过第一个样例!!!
大佬帮看看问题
求求了
CPP
#include <iostream>
#include <string>
using namespace std;

int findPeakElement(const string& s, const int& n) {
	
	if (n <= 0) return -1;
	
	char maxPeak = 0;
	int maxPeakIdx = 0;
	
	for (int i = 0; i < n; i++) {
		int cnt = 0;
		const bool left = (i == 0);
		const bool right = (i == n - 1);
		
		cnt += (!left  && s[i - 1] < s[i]);
		cnt += (!right && s[i + 1] < s[i]);
		
		if (cnt == 2 - left - right) {
			if (maxPeak < s[i]) {
				maxPeak = s[i];
				maxPeakIdx = i;
			}
		}
	}
	
	return (maxPeakIdx);
}

void strRemoveChar(string& s, const int& tgtIdx) {
	s = s.substr(0, tgtIdx) + s.substr(tgtIdx + 1);
}

int main(int argc, char** argv) {
	string s;
	int k, n;
	
	getline(cin, s);
	cin >> k;
	
	n = static_cast<int>(s.size());
	
	while (k--) {
		int peakIdx = findPeakElement(s, n);
		
		if (peakIdx >= 0 && peakIdx < n) {
			strRemoveChar(s, peakIdx);
			n--;
		} else {
			break;
		}
	}
	
	while (s.front() == '0' && s.size() > 1) s.erase(s.begin());
	
	cout << s << "\n";
	
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...