LLEETCODE力扣详解:4.寻找两个正序数组的中位数;5.最长回文子串

标题:寻找两个正序数组的中位数

题目:

给定两个大小分别为 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;
}
}

做题过程中的部分截图:

 

猜你喜欢

转载自blog.csdn.net/Abtxr/article/details/126305398