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击穿: