parent
e0c47a27e8
commit
afee1bccc9
@ -0,0 +1,35 @@
|
|||||||
|
package class_2022_11_5_week;
|
||||||
|
|
||||||
|
// 将一个给定字符串 s 根据给定的行数 numRows
|
||||||
|
// 以从上往下、从左到右进行 Z 字形排列
|
||||||
|
// 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下
|
||||||
|
// P A H N
|
||||||
|
// A P L S I I G
|
||||||
|
// Y I R
|
||||||
|
// 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串
|
||||||
|
// "PAHNAPLSIIGYIR"
|
||||||
|
// 请你实现这个将字符串进行指定行数变换的函数
|
||||||
|
// string convert(string s, int numRows)
|
||||||
|
// 测试链接 : https://leetcode.cn/problems/zigzag-conversion/
|
||||||
|
public class Code02_ZigZagConversion {
|
||||||
|
|
||||||
|
public static String convert(String s, int row) {
|
||||||
|
int n = s.length();
|
||||||
|
if (row == 1 || row >= n) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
int t = 2 * (row - 1);
|
||||||
|
char[] ans = new char[n];
|
||||||
|
int fill = 0;
|
||||||
|
for (int i = 0; i < row; i++) {
|
||||||
|
for (int j = i, nextColTop = t; j < n; j += t, nextColTop += t) {
|
||||||
|
ans[fill++] = s.charAt(j);
|
||||||
|
if (i >= 1 && i <= row - 2 && nextColTop - i < n) {
|
||||||
|
ans[fill++] = s.charAt(nextColTop - i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return String.valueOf(ans);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package class_2022_11_5_week;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
// 一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。
|
||||||
|
// 给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和
|
||||||
|
// 由于答案可能非常大,请返回对 109 + 7 取余 后的结果。
|
||||||
|
// 子序列 定义为从一个数组里删除一些(或者不删除)元素,
|
||||||
|
// 但不改变剩下元素的顺序得到的数组
|
||||||
|
// 例如,[3,6,2,7] 就是数组 [0,3,1,6,2,2,7] 的一个子序列。
|
||||||
|
// 测试链接 : https://leetcode.cn/problems/sum-of-subsequence-widths/
|
||||||
|
public class Code03_SumOfSubSequenceWidths {
|
||||||
|
|
||||||
|
public static int sumSubseqWidths(int[] nums) {
|
||||||
|
Arrays.sort(nums);
|
||||||
|
int mod = 1000000007;
|
||||||
|
long ans = 0;
|
||||||
|
long A = 0;
|
||||||
|
long B = 0;
|
||||||
|
long C = 1;
|
||||||
|
long D = C;
|
||||||
|
for (int i = 1; i < nums.length; i++) {
|
||||||
|
A = (D * nums[i]) % mod;
|
||||||
|
B = (B * 2 + nums[i - 1]) % mod;
|
||||||
|
ans = (ans + A - B + mod) % mod;
|
||||||
|
C = (C * 2) % mod;
|
||||||
|
D = (D + C) % mod;
|
||||||
|
}
|
||||||
|
return (int) (ans);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in new issue