刷题包括笔试中经常会遇到合并问题,将LeetCode中常见的合并问题的代码总结如下,包括数组合并、链表合并、区间合并,涉及到排序,递归等常用操作:
1.关于数组合并:(LeetCode 88:merge-sorted-array)
Given two sorted integer arrays A and B, merge B into A as one sorted array.
Note:
You may assume that A has enough space to hold additional elements from B. The number of elements initialized in A and B are m and n respectively.
题意:给定两个排序的整数数组A和B,将B合并为A作为一个排序的数组。
public class Solution {
public void merge(int A[], int m, int B[], int n) {
int index = m+n-1;
int i = m-1;
int j = n-1;
while(index>=0 && j>=0 && i>=0){
if(A[i]<=B[j])
A[index--]=B[j--];
else
A[index--]=A[i--];
}
if(i<0){
while(j>=0)
A[index--]=B[j--];
}
if(j<0){
while(i>=0)
A[index--]=A[i--];
}
}
}
2.两个有序链表的合并:(LeetCode 21:merge-two-sorted-lists)
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
也是剑指offer的原题,使用递归来处理。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = n