88.合并两个有序数组
我用暴力,也过了😏
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
for(int i=m;i
nums1[i]=nums2[i-m];
}
Arrays.sort(nums1);
}
}
双指针解法。
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int p1=0,p2=0,cur=0;
int[] ans=new int[m+n];
while(p1
if(p1==m)
cur=nums2[p2++];
else if(p2==n)
cur=nums1[p1++];
else if(nums1[p1]
cur=nums1[p1++];
else
cur=nums2[p2++];
ans[p1+p2-1]=cur;
}
for(int i=0;i
nums1[i]=ans[i];
}
}
53.最大子数组和
这里我又跟着答案学了第二种方法,动规。主要是那dp状态定义想不到。
class Solution {
public int maxSubArray(int[] nums) {
int n=nums.length;
int ans=Integer.MIN_VALUE;
int[] dp=new int[n];
dp[0]=nums[0];
for(int i=1;i
dp[i]=Math.max(nums[i],dp[i-1]+nums[i]);
}
for(int i:dp){
ans=ans>i?ans:i;
}
return ans;
}
}