4.寻找两个正序数组的中位数
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
//特殊情况处理
if (nums1.length==0){
return getMedian(nums2);
}
if (nums2.length==0){
return getMedian(nums1);
}
//给合并结果赋值 因为是有序的所以两个指针去比较,小的往后移动。当没有数据可以移动的时候给最后一个数赋值为int的最大值
int i=0,j=0,x=0;
int [] all = new int[nums1.length+nums2.length];
while (true){
if (nums1[i]>nums2[j]){
all[x]=nums2[j];
if (j==nums2.length-1){
nums2[j]= Integer.MAX_VALUE;
}else {
j++;
}
}else {
all[x]=nums1[i];
if (i==nums1.length-1){
nums1[i]= Integer.MAX_VALUE;
}else {
i++;
}
}
if (x==all.length-1){
break;
}else {
x++;
}
}
return getMedian(all);
}
public static double getMedian(int [] arr){
if (arr.length % 2 == 0){
return (double) (arr[(arr.length-1)/2] + arr[arr.length/2]) / 2;
}else {
return arr[arr.length/2];
}
}
5.最长回文字串
public String longestPalindrome(String s) {
int len = s.length();
if (len < 2) {
return s;
}
int maxLen = 1;
int begin = 0;
// dp[i][j] 表示 s[i..j] 是否是回文串
boolean[][] dp = new boolean[len][len];
// 初始化:所有长度为 1 的子串都是回文串
for (int i = 0; i < len; i++) {
dp[i][i] = true;
}
char[] charArray = s.toCharArray();
// 递推开始
// 先枚举子串长度
for (int L = 2; L <= len; L++) {
// 枚举左边界,左边界的上限设置可以宽松一些
for (int i = 0; i < len; i++) {
// 由 L 和 i 可以确定右边界,即 j - i + 1 = L 得
int j = L + i - 1;
// 如果右边界越界,就可以退出当前循环
if (j >= len) {
break;
}
if (charArray[i] != charArray[j]) {
dp[i][j] = false;
} else {
if (j - i < 3) {
dp[i][j] = true;
} else {
dp[i][j] = dp[i + 1][j - 1];
}
}
// 只要 dp[i][L] == true 成立,就表示子串 s[i..L] 是回文,此时记录回文长度和起始位置
if (dp[i][j] && j - i + 1 > maxLen) {
maxLen = j - i + 1;
begin = i;
}
}
}
return s.substring(begin, begin + maxLen);
}
6.Z字形变换
public static String convert(String s, int numRows) {
ArrayList<StringBuilder> sbs = new ArrayList<>();
for (int i = 0; i < numRows; i++) {
sbs.add(new StringBuilder());
}
if (numRows == 1) return s;
int i = 0;
int flag = -1;
for (char c : s.toCharArray()) {
sbs.get(i).append(c);
if (i==numRows-1 || i==0){
flag = - flag;
}
i += flag;
}
String result = "";
for (StringBuilder sb : sbs) {
result = result + sb.toString();
}
return result;
}