合并两个有序的数组&&链表中环的入口节点&&括号序列

304 阅读1分钟

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 ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
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 {
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    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();
    }
}