1、1->8->5->4->6->3->2 以某个节点为分隔。要求所有比该节点小的都在该节点前,比该节点大的都在节点后但是相对位置不变如:x=4时,1->3->2->4->8->5->6。
public class test013 {
public static void main(String[] args) {
ListNode head = new ListNode(0);
ListNode p = head;
ListNode p2 = head;
int[] a = new int[]{1, 8, 5, 4, 6, 3, 2};
int i=0;
while(i<a.length){
ListNode newHead = new ListNode(a[i]);
p.next = newHead;
p = p.next;
i++;
}
while (p2.next != null){
System.out.print(p2.next.val+" ");
p2=p2.next;
}
ListNode res = fun(head, 4);
System.out.println();
System.out.println("根据规则得:");
while (res.next!=null){
System.out.print(res.next.val+" ");
res = res.next;
}
}
private static ListNode fun(ListNode head, int key) {
ListNode p = head.next;
ListNode p2 = head;
ListNode head1 = new ListNode(0);
ListNode ph1 = head1;
ListNode head2 = new ListNode(0);
ListNode ph2 = head2;
while(p!=null){
if(p.val < key){
ph1.next = p;
ph1 = ph1.next;
p = p.next;
ph1.next = null;
}else if(p.val > key){
ph2.next = p;
ph2 = ph2.next;
p = p.next;
ph2.next = null;
}else{
p = p.next;
}
}
System.out.println();
System.out.println("head1链表的值如下:");
while(head1.next!=null){
System.out.print(head1.next.val+" ");
p2.next = head1.next;
p2 = p2.next;
head1 = head1.next;
}
System.out.println();
p2.next = new ListNode(key);
p2 = p2.next;
System.out.println("head2链表的值如下:");
while(head2.next!=null){
System.out.print(head2.next.val+" ");
p2.next = head2.next;
p2 = p2.next;
head2 = head2.next;
}
return head;
}
}
2、给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
class Interval {
int start;
int end;
public Interval(){
start =0;
end =0;
}
public Interval(int s, int e) {
start = s;
end = e;
}
}
public class test015 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int i=0;
ArrayList<Interval> list = new ArrayList<>();
while (i<N){
int s = sc.nextInt();
int e = sc.nextInt();
Interval interval = new Interval(s, e);
list.add(interval);
i++;
}
ArrayList<Interval> res = merge(list);
}
public static ArrayList<Interval> merge(ArrayList<Interval> intervals) {
int n=intervals.size();
int[] starts=new int[n];
int[] ends=new int[n];
for(int i=0;i<n;i++){
starts[i]=intervals.get(i).start;
ends[i]=intervals.get(i).end;
}
System.out.println("排序前:");
for(int i=0; i<n; i++){
System.out.print(starts[i]+" ");
System.out.print(ends[i]);
System.out.println();
}
Arrays.sort(starts);
Arrays.sort(ends);
System.out.println("排序后:");
for(int i=0; i<n; i++){
System.out.print(starts[i]+" ");
System.out.print(ends[i]);
System.out.println();
}
System.out.println("合并区间后:");
ArrayList<Interval> res=new ArrayList<Interval>();
for(int i=0,j=0;i<n;i++){
if(i==n-1||starts[i+1]>ends[i]){
System.out.print(starts[j]+" ");
System.out.println(ends[i]);
res.add(new Interval(starts[j],ends[i]));
j=i+1;
}
}
return res;
}
}