Cover image for leetcode每日一题 P3228 将 1 移动到末尾的最大操作次数

leetcode每日一题 P3228 将 1 移动到末尾的最大操作次数

字数 266
阅读
访客

时间轴

时间轴

2025-11-13

init

贪心

题目:

最大操作次数,那么就从左边的 1 开始,把相邻的 1 看成 1 组,它们由一个或多个相邻的 0 分割,假设由 n 组 1,那么不难看出第 i 组 1 移动到最后一组 1 需要的操作次数为:第 i 组 1 的 1 的个数*(n-i)

123456789101112131415161718192021222324252627282930313233343536373839404142
#include <string>#include <vector>using std::string;using std::vector;class Solution {    public:	int maxOperations(string s)	{		int i, n = s.size();		int max_ops = 0;		int last_1_pos;		vector<int> vec;		for (i = 0; i < n; i++) {			if (s[i] == '1') {				last_1_pos = i;				break;			}		}		while (i < n) {			while (i < n && s[i] == '1') {				i++;			}			vec.push_back(i - last_1_pos);			while (i < n && s[i] == '0') {				i++;			}			last_1_pos = i;		}		if (s.back() == '1' && !vec.empty()) {			vec.pop_back();		}		n = vec.size();		for (i = 0; i < n; i++) {			max_ops += vec[i] * (n - i);		}		return max_ops;	}};
评论加载中…