数组类
88. 合并两个有序数组
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6] 解释:需要合并 [1,2,3] 和 [2,5,6] 。 合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标红的为 nums1 中的元素。
如果按照合并两个有序链表的思路来处理,那还需额外申请一个数组存储nums1数组中前m个元素(后面的n个0除外),代码如下:
但是可以使用反向双指针来操作,这样就不用额外申请一个数组了,具体操作还是和合并两个有序链表一样的。代码如下:
public void merge(int[] nums1, int m, int[] nums2, int n) {// p1 指向数组1最后一个元素(后面的0除外),p2指向数组2最后一个元素int p1 = m - 1, p2 = n - 1;// end 指向数组1尾部int end = m + n - 1;// 跟合并两有序链表类似while(p1 >= 0 && p2 >= 0) {if(nums1[p1] >= nums2[p2]) {nums1[end--] = nums1[p1--];} else {nums1[end--] = nums2[p2--];}}// 数组 1 还没处理完while(p1 >= 0) {nums1[end--] = nums1[p1--];}// 数组 2 还没处理完while(p2 >= 0) {nums1[end--] = nums2[p2--];}}
顺丰03. 收件节节高
题目给定一个数组,要求输出连续递增天数长度。
输入:[54,42,62,75,82,86,86] 输出:5 解释: 小哥A最近一周的收件数分别是:54,42,62,75,82,86,86,那么小哥A在这周的日收件最大连续增长天数是5 - 小哥A在这周第2天开始到第6天的日收件数都是在增长
- 第7天与第6天收件数一样,不算增长
思路:遍历一遍数组,定义两个变量,max用来记录当前所得的连续递增天数的最大值,cur用来记录当前递增天数的长度,算法流程如下:
- 初始定义
max = 1,cur = 1; - 遍历数组,从下标1到尾下标:
- 如果
nums[i] > nums[i - 1],说明是递增,cur++,然后max暂存当前最大值; - 否则,让
cur = 1,重新开始计数;class Solution { public int findMaxCI(int[] nums) { int max = 1, cur = 1; for(int i = 1; i < nums.length; i++) { if(nums[i] > nums[i - 1]) { cur++; max = Math.max(max, cur); } else { cur = 1; } } return max; } }
- 如果
