C++程序 检查给定数字的所有旋转是否大于或等于给定数字
给定整数 x ,任务是查找是否对元素的每个 k 周期移位都产生大于或等于相同元素的数字。
整数 x 的 k 循环移位是一个函数,它删除 x 的最后 k 个数字,并将它们插入开始。
例如,k 循环移位 123 是 k = 1 和 231的 312 。如果满足给定条件则打印 Yes 否则打印 No 。
例子:
输入: x = 123
输出: Yes
123 的 k 循环移位是 k=1 时的 312 和 k=2 时的231。
312 和 231 都大于 123。
输入: 2214
输出: No
当 k=2 时,2214 的 k 循环移位是 1422,小于 2214。
做法: 简单地查找数字的所有可能的 k 循环移位,并检查它们是否全部大于给定的数字。
以下是上述方法的实现:
// CPP implementation of the approach
#include<bits/stdc++.h>
using namespace std;
void CheckKCycles(int n, string s)
{
bool ff = true;
int x = 0;
for (int i = 1; i < n; i++)
{
// 在索引 i 处分割数字并添加到前面
x = (s.substr(i) + s.substr(0, i)).length();
// 检查该值是否大于或等于给定值
if (x >= s.length())
{
continue;
}
ff = false;
break;
}
if (ff)
{
cout << ("Yes");
}
else
{
cout << ("No");
}
}
// 驱动程序
int main()
{
int n = 3;
string s = "123";
CheckKCycles(n, s);
return 0;
}
/* This code contributed by Rajput-Ji */```
输出:
Yes
时间复杂度: O(N 2 ),其中 N 表示给定字符串的长度。
程序的时间复杂度为 O(N 2 ) ,因为首先它运行一个循环来遍历字符串,然后在其中使用子字符串函数。
辅助空间: O(1),不需要额外的空间,因此为常数。