NC22 合并两个有序的数组
题目链接
1、解题思路
2、代码
public class Solution {
public void merge(int A[], int m, int B[], int n) {
int index = A.length - 1;
m--;
n--;
while(m >= 0 || n >= 0){
if(n < 0){
break;
}else if(m < 0){
A[index--] = B[n--];
}else if(A[m] >= B[n]){
A[index--] = A[m--];
}else{
A[index--] = B[n--];
}
}
}
}
NC3 链表中环的入口节点
题目链接
1、解题思路
- 快慢指针,当相遇的时候,让快指针从头开始,
- 两个链表相遇后,一个指针指向相遇的位置,一个指针指到链表的头节点。两个指针均向后移动,判断当两者相同时,该节点便是链表到环的入口节点。
2、代码
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead) {
ListNode slow = pHead;
ListNode fast = pHead;
while(fast != null && fast.next != null){
slow = slow.next;
fast = fast.next.next;
if(fast == slow){
break;
}
}
if(fast == null || fast.next == null){
return null;
}
slow = pHead;
while(fast != slow){
fast = fast.next;
slow = slow.next;
}
return fast;
}
}
NC52 括号序列
题目链接
1、解题思路
- 栈的基本操作,左边括号进栈,右边括号进行比较看是否匹配
2、代码
import java.util.*;
public class Solution {
public boolean isValid (String s) {
Stack<Character> stack = new Stack<>();
for(char c:s.toCharArray()){
if(c == '(' || c == '{' || c == '['){
stack.push(c);
}else if(c == ']'){
if(stack.isEmpty()){
return false;
}
char tmp = stack.pop();
if(tmp != '['){
return false;
}
}else if(c == '}'){
if(stack.isEmpty()){
return false;
}
char tmp = stack.pop();
if(tmp != '{'){
return false;
}
}else{
if(stack.isEmpty()){
return false;
}
char tmp = stack.pop();
if(tmp != '('){
return false;
}
}
}
return stack.isEmpty();
}
}