88. 合并两个有序数组
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
python
思路迷区:
- 没有想到可以用一个复制的数组,作为存储数据
- insert使用错误
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: """ Do not return anything, modify nums1 in-place instead. """
p = 0
q = 0
nums = nums1[:m]
nums1[:] =[]
while p<m and q<n:
if nums[p]<nums2[q]:
nums1.append(nums[p])
p+=1
else:
nums1.append(nums2[q])
q+=1
if p<m:
nums1[p+q:] = nums[p:]
if q<n:
nums1[p+q:] = nums2[q:]
Java
思路2:
- 从后往前遍历nums1,nums2
- 用指针p1与p2分别指向数组nums1与nums2的第m-1个与n-1个元素,同时用指针q指向数组空间nums1的第m+n-1个元素
- 比较nums1[p1]与nums2[p2]的大小,将较大值max{nums1[p1],nums2[p2]}放至nums1[p]中,p1或p2指针前移一位,同时p指针前移一位,循环遍历数组nums1与nums2,直到将所有的元素重新都放到数组空间nums1为止。
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int p1 = m-1;
int p2 = n-1;
int q = m+n-1;
while(p1 >=0 && p2>=0){
if (nums2[p2] >= nums1[p1]){
nums1[q--] = nums2[p2--];
} else{
nums1[q--] = nums1[p1--];
}
}
while(p2 >= 0){
nums1[q--] = nums2[p2--];
}
}
}