今日头条,找出下一个比它大的整数

package Integer;

import java.util.Arrays;

public class GetNextAsc {

public static int getNextAsc(int obj) {        String temp = obj + "";        char[] chars = temp.toCharArray();        int len = chars.length;        for (int i = 0; (len - i - 2 >= 0) && i < len; i++) {            int maxIndex = -1;            char maxValue = ‘9‘ + 1;            //获取最小的大数值下标            for (int r = len - i - 1; r <= len - 1; r++) {                if (chars[r] > chars[len - i - 2]) {                    if (chars[r] < maxValue) {                        maxIndex = r;                        maxValue = chars[r];                    }                }            }

if (maxIndex == -1) {                continue;            } else {                //交换                char c = chars[len - i - 2];                chars[len - i - 2] = chars[maxIndex];                chars[maxIndex] = c;                //排序,从小到大                char[] subChar = Arrays.copyOfRange(chars, len - i - 1, len);                Arrays.sort(subChar);                for (int j = 0; j < i + 1; j++) {                    int k = len - i - 1 + j;                    chars[k] = subChar[j];                }                StringBuilder sb = new StringBuilder();                for (int p = 0; p < chars.length; p++) {                    sb.append(chars[p]);                }

return Integer.valueOf(sb.toString());

}

}

return -1;

}

public static void main(String[] args) {        System.out.println(getNextAsc(1111111));    }

}

原文地址:https://www.cnblogs.com/mlz-2019/p/9648782.html

时间: 09-14

今日头条,找出下一个比它大的整数的相关文章

最小(大)堆找出数组的最小(大)的k项值

//最小堆实现 void MyGlobal::min_heapify(int *a, int* b,int left, int right) { int child = 0; int tmp = 0; int tempb = 0; int parent = left; assert(a != NULL); for (tmp = a[parent],tempb=b[parent]; LEFTSON(parent) <= right; parent = child) { child = LEFTSO

微博枪口对准今日头条, 新旧势力攻防战正式打响

短短的几天内,新浪微博接连两次成为热点话题,将这款正在慢慢"翻身"的社交媒体应用推到大众的视野面前.前一次是微博的市值首次突破200亿美元,后一次是微博怒封今日头条的内容抓取接口. 两个事件表面上看似乎毫无关联,内地里却有着不可言喻的因果. 何事引得新浪微博暴怒? 8月10日中午,新浪微博蓝V管理员发布了一则公告,怒称"某第三方新闻平台在微博毫不知情.并未授权的情况下直接从微博抓取自媒体账号的内容,鉴于其行为性质严重,微博先行暂停了第三方接口." 我们都知道这个所谓

[CTCI] 下一个较大元素

下一个较大元素 题目描述 现在我们有一个int数组,请你找出数组中每个元素的下一个比它大的元素. 给定一个int数组A及数组的大小n,请返回一个int数组,代表每个元素比他大的下一个元素,若不存在则为-1.保证数组中元素均为正整数. 测试样例: [11,13,10,5,12,21,3],7 返回:[13,21,12,12,21,-1,-1] 1 class NextElement { 2 public: 3 vector<int> findNext(vector<int> A, i

10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。

题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存). 关于中位数:数据排序后,位置在最中间的数值.即将数据分成两部分,一部分大于该数值,一部分小于该数值.中位数的位置:当样本数为奇数时,中位数=(N+1)/2 ; 当样本数为偶数时,中位数为N/2与1+N/2的均值(那么10G个数的中位数,就第5G大的数与第5G+1大的数的均值了). 分析:明显是一道工

找出排序数组中重复数字的个数

开始我的思路是先二分查找找到一个,然后再两边分别看个数. 但是这种方法会退化到O(n).效率不好. 所以更好的方法是,先找出第一个,再找出最后一个.这个在二分查找的时候,通过判断条件的处理,是能够获得的. 比较基本的思路是,如果找到的数=k,那么判断前面一个数是不是k,如果不是,停止查找,这个是第一个:如果是的,那么继续在前半部分查找.领悟.

10G 个整数找出中位数,内存限制为 2G

题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存). 关于中位数:数据排序后,位置在最中间的数值.即将数据分 成两部分,一部分大于该数值,一部分小于该数值.中位数的位置:当样本数为奇数时,中位数=(N+1)/2 ; 当样本数为偶数时,中位数为N/2与1+N/2的均值(那么10G个数的中位数,就第5G大的数与第5G+1大的数的均值了). 分析:明显是一道

在一个文件中有10G个整数,乱序排列,要求找出中位数

 题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存). 关于中位数:数据排序后,位置在最中间的数值.即将数据分成两部分,一部分大于该数值,一部分小于该数值.中位数的位置:当样本数为奇数时,中位数=(N+1)/2 ; 当样本数为偶数时,中位数为N/2与1+N/2的均值(那么10G个数的中位数,就第5G大的数与第5G+1大的数的均值了). 分析:明显是一道

4.6 找出二叉树中指定节点的下一个节点(中序后继),假定每个节点有父指针。

5 / 2 6 / \ 1 4 7 / 3 class Node{ Node left; Node right; Node parent; int val; } /** 1.如果有右子树,则结果为右子树的最左节点. 2.如果没有右子树,则需要回到父节点,如果当前节点是父节点的左子树,则父节点就是结果,如果不是继续向上再找父节点. */ public TreeNode inorderSucc(TreeNode n){ if(n==null) return null; if(n.right!=nul

【趣味算法题】在数组中,对于所有元素,找出比当前元素大的下一个元素

在数组中,对于所有元素,找出比当前元素大的下一个元素 意思就是,eg.  数组为 3 1 2 5 4 6 7 那么我们需要得到的结果应该是  5 2 5 6 6 7 -1 解决方法如下: 暴力匹配: O (n ^ 2 ) 的效率对所有元素匹配过去,效率非常的低 经过提示, 我想到的一种 O ( nlg n ) 效率的算法 只需要对数组扫描一次,我们用一个 Priority_queue 来得到当前最小的元素 Prority_queue 存放的数据结构为: struct sc { int key,

程序员面试100题之十:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值(转)

能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解. 假如有如下的两个数组,如图所示: 5,6,1,4,7,9,8 给定Sum= 10 1,5,6,7,8,9 给定Sum= 10 分析与解法 这个题目不是很难,也很容易理解.但是要得出高效率的解法,还是需要一番思考的. 解法一 一个直接的解法就是穷举:从数组中任意取出两个数字,计算两者之和是否为给定的数字. 显然其时间复杂度为N(N-1)/2即O(N^2).这个算法很简