class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
//链表也有合并两个有序的,其中链表因为有next指针所以比较容易连起来,而数组只能通过新建数组,然后一个个放进去通过索引连接起来
//逆向双指针
int t1 = m-1;
int t2 = n-1 ;
int t = m + n - 1;
while(true){
if (t1 == -1){
for(int i = 0; i <= t2 ; i++){
nums1[i] = nums2[i];
}
return;
}
if (t2 == -1){
return ;
}
if (nums1[t1] >= nums2[t2]){
nums1[t] = nums1[t1];
t1--;
}else{
nums1[t] = nums2[t2];
t2--;
}
t--;
}
}
}
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
//排序双指针
//先排序
Arrays.sort(nums1);
Arrays.sort(nums2);
int[] arr = new int[Math.min(nums1.length,nums2.length)];
int cnt = 0;
int cur = 0;
int index = 0;
while(true){
if (nums1[cnt] == nums2[cur]){
arr[index] = nums1[cnt];
index++;
cnt++;
cur++;
} else if (nums1[cnt] < nums2[cur]){
cnt++;
}else if (nums1[cnt] > nums2[cur]){
cur++;
}
if (cur == nums2.length || cnt == nums1.length){
break;
}
}
return Arrays.copyOfRange(arr,0,index);
}
}
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
for(int i = 0 ; i < numRows ; i++){
List<Integer> list = new ArrayList<>();
if (i == 0){
list.add(1);
}else if (i == 1){
list.add(1);
list.add(1);
}else{
list.add(1);
List<Integer> last = result.get(i -1);
for(int j = 0 ; j < last.size() -1;j++){
list.add(last.get(j) + last.get(j +1));
}
list.add(1);
}
result.add(list);
}
return result;
}
}