赞
踩
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++;
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。