标题:寻找两个正序数组的中位数
题目:
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
代码解答:
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
// 获得nums1和nums2的长度
int m = nums1.length;
int n = nums2.length;
// 合并nums1和nums2,长度相等,数值相等;
double[] z = new double[m + n];
for(int i = 0; i < m; i++) z[i] = nums1[i];
for(int i = m, j = 0; i < m + n; i++, j++) z[i] = nums2[j];
// 引入sort函数,将新数组自动按照从小到大升序排列
Arrays.sort(z);
// 根据合并后的数组长度的奇偶性,输出新数组的中位数
if((m + n) % 2 == 0) return (z[(m + n) / 2 - 1] + z[(m + n) / 2]) / 2;
else return z[(m + n) / 2];
}
}
标题: 最长回文子串
题目:
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
代码解答:
class Solution {
public String longestPalindrome(String s) {
int max =0;
String res = new String();//创建一个新结果字符串
//遍历每个位置
for(int i=0;i<s.length();i++){
//中心可能是1个字符 也可能是2个字符
for(int j=0;j<=1;j++){
int l = i;
int r = i + j;
//左边的索引大于0,右边的索引小于字符串总长度,左右对应的索引映射的字符相等
while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){
if((r-l+1)>max){
max = r-l +1;
res = s.substring(l,r+1);//从左边第l的字符开始截取,截取到第r+1个字符
}
l--;
r++;
}
}
}
return res;
}
}
做题过程中的部分截图: