🔥 LeetCode 热题 HOT 100 : 20 && 21

125 阅读1分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

20. 有效的括号

一、题目描述:

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。  

示例 1:

输入:s = "()"

输出:true

二、思路分析:

准备一个栈,遇到左括号时入栈, 当遇到右括号时, 弹出栈顶元素,查看是否匹配, 不匹配时直接返回 False, 匹配就继续循环, 最后 栈为空时返回 true 反之 false

三、AC 代码:

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        Map<Character, Character> map = new HashMap<>();

        map.put(')','(');
        map.put(']','[');
        map.put('}', '{');

        char[] ch = s.toCharArray();

        for(char c : ch){
            if(map.containsKey(c)){
                if(stack.isEmpty()) return false;
                char pop = stack.pop();
                if(pop != map.get(c)) return false;
            }else{
                stack.push(c);
            }
        }

        return stack.isEmpty();
    }
}

21. 合并两个有序链表

一、题目描述:

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

image.png 示例 1:

输入:nums1 = [1,2], nums2 = [3,4]

输出:2.50000

解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

二、思路分析:

遍历两个有序链表, 当链表不为空时, 将较小元素的节点接在答案的后面, 循环处理即可

三、AC 代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {

        ListNode ans = new ListNode(-1);
        ListNode cur = ans;
        int INF = 1000;

        while(list1 != null || list2!=null){
            int a = list1!=null ? list1.val : INF;
            int b = list2!= null ? list2.val : INF;

            if(a < b){
                cur.next = new ListNode(a);
                list1 = list1.next;
            }else{
                cur.next = new ListNode(b);
                list2 = list2.next;
            }
            cur = cur.next;
        }

        return ans.next;
    }
}