LeetCode#556-下一个更大元素-arraycopy用法

import java.util.Arrays;

/*
给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n。如果不存在这样的32位整数,则返回-1。

示例 1:

输入: 12
输出: 21
示例 2:

输入: 21
输出: -1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/next-greater-element-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
 */
public class p556 {

    // N = String.valueOf(n)的长度
//O(N)time O(N)space

        public int nextGreaterElement(int n) {
            //2^32 < 10^10
            int[] t = new int[10];
            int l = t.length;
            int temp = n;
            //将n 变成数组
            while (l > 0 && temp > 0) {
                l--;
                t[l] = temp % 10;
                temp /= 10;
            }
            for (int i = t.length - 1; i > l; i--) {
                if (t[i] > t[i - 1]) {
                    //找到前一个数小于后一个数的位置
                    int tempIndex = i;
                    //找到 i -1 后大于 t[i-1] 的最小数
                    for (int j = i; j < t.length; j++) {
                        if (t[j] > t[i - 1] && t[j] < t[tempIndex]) {
                            tempIndex = j;
                        }
                    }
                    //将 i -1 后大于 t[i-1] 的最小数 和 t[i-1] 交换位置
                    temp = t[i - 1];
                    t[i - 1] = t[tempIndex];
                    t[tempIndex] = temp;
                    //获取从i开始的后面的元素
                    int[] arr = new int[t.length - i];
                    System.arraycopy(t, i, arr, 0, t.length - i);
                    //进行从小到大排序
                    Arrays.sort(arr);
                    //然后依次赋值到 t 的 i - len 索引
                    System.arraycopy(arr, 0, t, i, arr.length);
                    break;
                }
            }
            //计算新的结果
            int res = 0;
            for (int i : t) {
                res = res * 10 + i;
            }
            return res <= n ? -1 : res;
        }





    public static void main(String[] args) {
        //System.out.println(nextGreaterElement(230241));
    }
}

  arraycopy用法:

 

posted @ 2020-07-04 16:05  菜鸡要加油  阅读(157)  评论(0编辑  收藏  举报