目录
1. 乘积最大子数组 🌟🌟
2. 插入区间 🌟🌟
3. 删除有序数组中的重复项 II 🌟🌟
🌟 每日一练刷题专栏 🌟
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
1. 乘积最大子数组
给你一个整数数组 nums
,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
示例 1:
输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
出处:
https://edu.csdn.net/practice/26466594
代码:
import java.util.*;
public class maxProduct {public static class Solution {public int maxProduct(int[] nums) {int max = Integer.MIN_VALUE, imax = 1, imin = 1;for (int i = 0; i < nums.length; i++) {if (nums[i] < 0) {int tmp = imax;imax = imin;imin = tmp;}imax = Math.max(imax * nums[i], nums[i]);imin = Math.min(imin * nums[i], nums[i]);max = Math.max(max, imax);}return max;}}public static void main(String[] args) {Solution s = new Solution();int[] nums = {2,3,-2,4};System.out.println(s.maxProduct(nums));int[] nums2 = {-2,0,-1};System.out.println(s.maxProduct(nums2));}
}
输出:
6
0
2. 插入区间
给你一个 无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
示例 1:
输入:intervals = [[1,3],[6,9]], newInterval = [2,5] 输出:[[1,5],[6,9]]
示例 2:
输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8] 输出:[[1,2],[3,10],[12,16]] 解释:这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。
示例 3:
输入:intervals = [], newInterval = [5,7] 输出:[[5,7]]
示例 4:
输入:intervals = [[1,5]], newInterval = [2,3] 输出:[[1,5]]
示例 5:
输入:intervals = [[1,5]], newInterval = [2,7] 输出:[[1,7]]
提示:
0 <= intervals.length <= 10^4
intervals[i].length == 2
0 <= intervals[i][0] <= intervals[i][1] <= 10^5
intervals
根据intervals[i][0]
按 升序 排列newInterval.length == 2
0 <= newInterval[0] <= newInterval[1] <= 10^5
出处:
https://edu.csdn.net/practice/26466595
代码:
import java.util.*;
public class insertIntervals {public static class Solution {public int[][] insertIntervals(int[][] intervals, int[] newInterval) {int[][] newIntervals = new int[intervals.length + 1][];System.arraycopy(intervals, 0, newIntervals, 0, intervals.length);newIntervals[intervals.length] = newInterval;Arrays.sort(newIntervals, (a, b) -> a[0] - b[0]);Stack<int[]> stack = new Stack<>();for (int[] num : newIntervals) {if (stack.isEmpty()) {stack.push(num);continue;}int[] arr = stack.peek();if (arr[1] >= num[0]) {int[] combine = { arr[0], Math.max(arr[1], num[1]) };stack.pop();stack.push(combine);} else {stack.push(num);}}return stack.toArray(new int[0][]);}}public static String ArrayToString(int[] arr) {String res = "[";for (int i = 0; i < arr.length; ++i) {res += String.valueOf(arr[i]);if (i+1 < arr.length) {res += ",";}}return res + "]";}public static void printArray2D(int[][] arr) {System.out.print("[");for (int i = 0; i < arr.length; ++i) {System.out.print(ArrayToString(arr[i]));if (i+1 < arr.length) {System.out.print(",");}}System.out.println("]");}public static void main(String[] args) {Solution s = new Solution();int[][] intervals = {{1,3},{6,9}};int[] newInterval = {2,5};printArray2D(s.insertIntervals(intervals,newInterval));int[][] intervals2 = {{1,2},{3,5},{6,7},{8,10},{12,16}};int[] newInterval2 = {4,8};printArray2D(s.insertIntervals(intervals2,newInterval2));}
}
输出:
[[1,5],[6,9]]
[[1,2],[3,10],[12,16]]
3. 删除有序数组中的重复项 II
给你一个有序数组 nums
,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
说明:
为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:
// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 int len = removeDuplicates(nums);// 在函数里修改输入数组对于调用者是可见的。 // 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。 for (int i = 0; i < len; i++) { print(nums[i]); }
示例 1:
输入:nums = [1,1,1,2,2,3] 输出:5, nums = [1,1,2,2,3] 解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 不需要考虑数组中超出新长度后面的元素。
示例 2:
输入:nums = [0,0,1,1,1,1,2,3,3] 输出:7, nums = [0,0,1,1,2,3,3] 解释:函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。 不需要考虑数组中超出新长度后面的元素。
提示:
1 <= nums.length <= 3 * 10^4
-10^4 <= nums[i] <= 10^4
nums
已按升序排列
出处:
https://edu.csdn.net/practice/26466596
代码:
import java.util.*;
public class removeDuplicatesII {public static class Solution {public int removeDuplicates(int[] nums) {int i = 0;for (int n : nums)if (i < 2 || n > nums[i - 2])nums[i++] = n;return i;}}public static void main(String[] args) {Solution s = new Solution();int[] nums = {1,1,1,2,2,3};System.out.println(s.removeDuplicates(nums));int[] nums2 = {0,0,1,1,1,1,2,3,3};System.out.println(s.removeDuplicates(nums2));}
}
输出:
5
7
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
Golang每日一练 专栏 | |
Python每日一练 专栏 | |
C/C++每日一练 专栏 | |
Java每日一练 专栏 |