LC53最大子数组和、lc5最长回文子串、lc283移动零

LC53最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组

是数组中的一个连续部分。

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

示例 2:

输入:nums = [1]
输出:1

示例 3:

输入:nums = [5,4,-1,7,8]
输出:23
class Solution {
    public int maxSubArray(int[] nums) {
        if(nums.length == 1) return nums[0];
        int max = 0, res = Integer.MIN_VALUE;
        for(int i = 0; i < nums.length; i++) {
            max = Math.max(nums[i] + max, nums[i]);
            res = Math.max(max, res);
        }
        return res;
    }
}

lc5最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"
输出:"bb"
class Solution {
    public String longestPalindrome(String s) {
        if(s.length() == 1) return s;
        // 第一位表示其实idx,第二位表示长度
        int[] res = new int[2]; 
        int maxLen = 0; 
        for(int i = 0; i < s.length() - 1; i++) {
            int[] temp = new int[2];
            int[] odd = isHuiWen(s, i, i);
            int[] even = isHuiWen(s, i, i+1);
            if(odd[1] > even[1]) temp = odd;
            else temp = even;
            if(temp[1] > maxLen) {
                maxLen = temp[1];
                res = temp;
            }
        }
        return s.substring(res[0], res[0] + res[1]);      
    }

    public int[] isHuiWen(String s, int l, int r) {
        int[] res = new int[2];
        while(l >= 0 && r < s.length()) {
            if(s.charAt(l) != s.charAt(r)) break;
            else {
                l = l - 1;
                r = r + 1;
            }
        }
        res[0] = l+1;
        res[1] = r - l -1;
        return res;
    }
}

LC283移动0

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]
class Solution {
    public void moveZeroes(int[] nums) {
        int l = 0, r = 0;
        while(r < nums.length) {
            if(nums[r] != 0) {
                int temp = nums[l];
                nums[l] = nums[r];
                nums[r] = temp;
                l++;
            }
            r++;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值