我有一个整数N。我必须找到大于N的最小整数,该整数不包含0或1之外的任何数字。例如:如果N = 12答案为100。我已经用C ++编写了一种蛮力方法。
int main() {
long long n;
cin >> n;
for (long long i = n + 1; ; i++) {
long long temp = i;
bool ok = true;
while (temp != 0) {
if ( (temp % 10) != 0 && (temp % 10) != 1) {
ok = false;
break;
}
temp /= 10;
}
if (ok == true) {
cout << i << endl;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,我的方法太慢了。我相信有一个非常有效的方法可以解决这个问题。如何有效解决此问题?
我给了一个std::set<std::pair<int,int>>和一个整数x,我必须找到第一个对的迭代器,该对的第一个元素大于或等于给定的整数x。
我了解到,如果s是set<pair<int, int>>和{x, y}是一对,那么我可以使用s.lower_bound({x, y})。但是,就我而言,我只需要关心第一个元素x。所以,我的问题是如何使用lower_bound的set<pair<int, int>>,当我只关心的第一个元素?
假设一个数组A = {5, 4, 3, 7, 9, 11, 2}。有K很多查询。在每个查询中,我将得到两个整数L,R其中0 <= L <= R < N(N是数组的大小)。我必须告诉A[L...R]子数组是否已排序。
例如,第一个查询要求我告诉索引0到6(基于0的索引)的子数组是否已排序。答案是,A[0...6]没有排序。然后第二个查询问我是否A[2...5]排序。该子数组已排序。这是我的处理方法。有没有更好的办法?
int main()
{
int a[7] = { 5, 4, 3, 7, 9, 11, 2}, k = 2;
for(int i = 1; i <= k; i++)
{
int l, r;
cin >> l >> r;
bool isSorted = true;
for(int j = l; j < r; j++)
{
if(a[j] …Run Code Online (Sandbox Code Playgroud) 给定一个数字N (where N <= 10^18)和一个数组A(consisting of at most 20 elements)。我必须告诉是否可以N通过乘以数组的某些元素来形成。请注意,我可以多次使用任何元素。
示例:N = 8和A = {2, 3}。在这里,8 = 2 * 2 * 2。所以答案是YES。但是,如果N = 15,则我无法将15用作一个或多个元素多次使用它们的乘积。因此,在这种情况下,答案是NO。
我该如何解决这个问题?