package org.example.interview.practice;
/**
* @author xianzhe.ma
* @date 2021/9/1
*/
public class NC_22_MERGE_ARRAY {
public static void merge(int A[], int m, int B[], int n) {
if (m == 0) {
for (int i=0;i<B.length;i++) {
A[i] = B[i];
}
return ;
}
int i=0;
int j = 0;
for (;i<m&&j<n;) {
if (A[i] < B[j]) {
i++;
} else {
moveBack(A,i, m);
A[i] = B[j];
j++;
}
}
if (j<n) {
int start = m + (n-j-1);
for (;j<n;j++) {
A[start] = B[j];
start++;
}
}
}
private static void moveBack(int arr[], int start,int validLength) {
for (int i=start;i<validLength;i++) {
arr[i+1] = arr[i];
}
}
public static void merge2(int A[], int m, int B[], int n) {
int end = m + n - 1, i = m - 1, j = n - 1; //初始化 end,i,j
while (end != 0 && i >= 0 && j >= 0) {
if (A[i] > B[j]) {
A[end--] = A[i--]; //从尾部开始
} else {
A[end--] = B[j--];
}
}
while (j >= 0) {
A[end--] = B[j--]; // i《0,复制B
}
}
public static void main (String[] agrs) {
int[] a = new int[2];
a[0] = 2;
int[] b = {1};
merge2 (a,1,b,1);
}
}
package org.example.interview.practice;
/**
* @author xianzhe.ma
* @date 2021/8/25
*/
public class NC_23_PARTITION_LIST {
public static class ListNode {
int val;
ListNode next = null;
public ListNode(int val) {
this.val = val;
}
}
public ListNode partition (ListNode head, int x) {
// write code here
ListNode small = new ListNode(0);
ListNode smallHead = small;
ListNode large = new ListNode(0);
ListNode largeHead = large;
while (head != null) {
if(head.val<x){
small.next = head;
small = small.next;
}else{
large.next = head;
large =large.next;
}
head = head.next;
}
//对链表进行指空处理
large.next = null;
//将链表连起来
small.next = largeHead.next;
//返回新链表
return smallHead.next;
}
}
package org.example.interview.practice;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.HashSet;
import java.util.Set;
/**
* @author xianzhe.ma
* @date 2021/7/21
*/
public class NC_24_DELETEDUPLICATENODE {
public static class ListNode {
int val;
ListNode next = null;
public ListNode(int val) {
this.val = val;
}
}
public static ListNode deleteDuplicates (ListNode head) {
// write code here
Deque<ListNode> deque = new ArrayDeque<>();
while (head != null) {
if (deque.isEmpty() || deque.peekLast().val != head.val) {
deque.addLast(head);
head = head.next;
} else {
while (head != null && deque.peekLast().val == head.val) {
head = head.next;
}
ListNode last = deque.removeLast();
last = null;
}
}
head = null;
ListNode cur = null;
while (!deque.isEmpty()) {
ListNode node = deque.pollFirst();
node.next = null;
if (head == null) {
head = node;
cur = node;
} else {
cur.next = node;
cur = cur.next;
}
}
return head;
}
public static void main (String[] args) {
ListNode node = new ListNode(1);
ListNode two = new ListNode(2);
node.next = two;
ListNode three = new ListNode(2);
two.next = three;
ListNode result = deleteDuplicates(node);
System.out.println(result.val);
}
}
package org.example.interview.practice;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.HashSet;
import java.util.Set;
/**
* @author xianzhe.ma
* @date 2021/7/21
*/
public class NC_25_DELETEDUPLICATENODE_I {
public static class ListNode {
int val;
ListNode next = null;
public ListNode(int val) {
this.val = val;
}
}
public static ListNode deleteDuplicates (ListNode head) {
// write code here
Deque<ListNode> deque = new ArrayDeque<>();
while (head != null) {
if (deque.isEmpty() || deque.peekLast().val != head.val) {
deque.addLast(head);
head = head.next;
} else {
while (head != null && deque.peekLast().val == head.val) {
head = head.next;
}
// ListNode last = deque.removeLast();
// last = null;
}
}
head = null;
ListNode cur = null;
while (!deque.isEmpty()) {
ListNode node = deque.pollFirst();
node.next = null;
if (head == null) {
head = node;
cur = node;
} else {
cur.next = node;
cur = cur.next;
}
}
return head;
}
public static void main (String[] args) {
ListNode node = new ListNode(1);
ListNode two = new ListNode(2);
node.next = two;
ListNode three = new ListNode(2);
two.next = three;
ListNode result = deleteDuplicates(node);
System.out.println(result.val);
}
}