2024.2.22

leetcode31(没憋出来方法,看的解析)

思路:

1、从后向前遍历数组,找到第一个nums[i] < nums[i + 1]的下标,目的是找到交换的位置,将后面更大的值换到前面,以得到下一个序列;(找到i后,i + 1到n - 1为降序,此时子数组i + 1到n - 1已达到最大,需要对i + 1前面的元素进行变动)

2、从后向前遍历数组,找到k,使得nums[k] > nums[i],这样就能找到要交换的数了,得到下一个比所给数更大的序列;

3、交换下标为i和k的数;

4、i + 1以后的子数组变为升序,这样才能使得序列的字典序最小(没找到nums[i] < nums[i + 1]时,i = -1,此时整个数组为降序,翻转整个数组即可)

图解:

以求 12385764 的下一个排列为例:

首先从后向前查找第一个相邻升序的元素对 (i,j)。这里 i=4,j=5,对应的值为 5,7:

然后在 [j,end) 从后向前查找第一个大于 A[i] 的值 A[k]。这里 A[i] 是 5,故 A[k] 是 6:

这时 [j,end) 必然是降序,逆置 [j,end),使其升序。这里逆置 [7,5,4]:

此时得到序列12386457。

线程池创建:

ExecutorService ThreadPool = Executors.newFixedThreadPool(10);

上述代码创建了包含10个线程的线程池

泛型形式函数调用:

public <R, T> R functon1(T t, Class<R> r, Function<T, R> Fallback) {

R r = Fallback.apply(t);

return r;

}

上述代码中,R、T的类型未知,需调用者给出,Class<R>为R.class类型,Function<T, R>代表调用者所给函数的参数为T类型,返回值为R,调用的形式如下:

R1 r1 = functon1(t1, R1.class, t2 -> function2(t2))

其中t1、t2为T1类型,所传入的函数为 function2,参数为T1类型,调用泛型形式函数时,T1赋给T,R1赋给R

逻辑过期方式解决Redis击穿:

全部评论
不要看题目硬憋,自己找两个case过一下。。其实不难
点赞 回复
分享
发布于 02-26 08:01 北京
这题刚做过,但还是第一时间想不出来
点赞 回复
分享
发布于 03-16 10:02 北京
联易融
校招火热招聘中
官网直投

相关推荐

1 3 评论
分享
牛客网
牛客企业服务