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++;
}
}
}