当前位置: 首页 > 编程笔记 >

C ++中的下一个Greater Element III

邵捷
2023-03-14
本文向大家介绍C ++中的下一个Greater Element III,包括了C ++中的下一个Greater Element III的使用技巧和注意事项,需要的朋友参考一下

假设我们有一个正的32位整数n,我们需要找到最小的32位整数,该整数与整数n中存在的数字完全相同,并且值大于n。如果我们没有这样的正32位整数,则返回-1。

因此,如果数字为213,则结果将为231。

为了解决这个问题,我们将遵循以下步骤-

  • s:= n作为字符串,sz:= s的大小,确定:= false

  • 当我在sz范围内– 2到0

    • 如果s [i] <s [i + 1],则ok:= true并中断循环

  • 如果of为假,则返回– 1

  • 最小:= i,curr:= i + 1

  • 对于范围i + 1至sz – 1中的j

    • id s [j]> s [smallest]和s [j] <= s [curr],然后curr:= j

  • 与s [curr]交换s [smallest]

  • aux:= s的子串,从索引0到最小

  • 反向辅助

  • ret:= s的子串,从索引0到最小+ aux

  • 如果ret> 32位+ ve整数范围,则返回-1,否则ret

让我们看下面的实现以更好地理解-

示例

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int nextGreaterElement(int n) {
      string s = to_string(n);
      int sz = s.size();
      int i;
      bool ok = false;
      for(i = sz - 2; i >= 0; i--){
         if(s[i] < s[i + 1]) {
            ok = true;
            break;
         }
      }
      if(!ok) return -1;
      int smallest = i;
      int curr = i + 1;
      for(int j = i + 1; j < sz; j++){
         if(s[j] > s[smallest] && s[j] <= s[curr]){
            curr = j;
         }
      }
      swap(s[smallest], s[curr]);
      string aux = s.substr(smallest + 1);
      reverse(aux.begin(), aux.end());
      string ret = s.substr(0, smallest + 1) + aux;
      return stol(ret) > INT_MAX ? -1 : stol(ret);
   }
};
main(){
   Solution ob;
   cout << (ob.nextGreaterElement(213));
}

输入值

213

输出结果

231
 类似资料:
  • 我有一个循环,不断从我的串行端口读取。循环是无限的,所以我所知道的停止程序的唯一方法是使用。这个解决方案的问题是,当我使用时,我的程序会突然结束,我怀疑这也会导致其他问题。在程序结束时,我关闭了与我正在访问的串行端口的文件描述符的连接,但是我认为我的程序从来没有达到这个连接,因为我使用了命令,它只是在正确的位置停止程序它是。 有没有一种方法可以让我创建无限的time循环,并在我想要的时候退出,但同

  • 想问一下一个C语言的位运算小问题. 有没有一个简单的表达式的写法,可以得到一个32位无符号数,只保留其最左侧或者最右侧的1的结果? 比如35=(000..0100011),得到32或者1? 用循环写的话不难,但,用一个简洁的表达式能写出来吗?

  • 本文向大家介绍说一下C++和C的区别 ?相关面试题,主要包含被问及说一下C++和C的区别 ?时的应答技巧和注意事项,需要的朋友参考一下 设计思想上: C++是面向对象的语言,而C是面向过程的结构化编程语言 语法上: C++具有封装、继承和多态三种特性 C++相比C,增加多许多类型安全的功能,比如强制类型转换、 C++支持范式编程,比如模板类、函数模板等

  • 本文向大家介绍请说一下C/C++ 中指针和引用的区别?相关面试题,主要包含被问及请说一下C/C++ 中指针和引用的区别?时的应答技巧和注意事项,需要的朋友参考一下 1.指针有自己的一块空间,而引用只是一个别名; 2.使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小; 3.指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象 的引用; 4.作为参数传递时,指针需要被解引

  • 问题内容: 我需要使用JavaScript根据下拉菜单A中的选择更改下拉菜单B的内容。没有涉及到数据库查询- 我事先知道应该在A中选择B的内容。我已经找到了一些使用AJAX的示例,但是由于没有涉及到数据库查询,所以没有必要。谁能为我指出一些示例代码以实现此目的? 问题答案: function configureDropDownLists(ddl1, ddl2) {

  • 问题内容: 说我有 ID的* 记录 * 我希望能够通过下一个/上一个链接导航到另一个。 问题是,我不知道 如何获取具有最近的较高ID的记录 。 因此,当我有一个 ID为ID 的记录时,我需要能够提取下一个现有记录,即为。 该查询可能看起来像 如何获取下一个/上一个记录而不获取整个结果集并手动迭代? 我正在使用MySQL 5。 问题答案: 下一个: 以前的: