算法进修Day-10

算法进修Day-10

19.删除链表的倒数第N个结点

题目难度:中等
题目要求:
给定一个链表,删除链表中的倒数第n个结点,并且返回链表的头节点

示例1

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例2

输入:head = [1], n = 1
输出:[]

示例3

输入:head = [1,2], n = 1
输出:[1]

题解

最开始的想法:采用快慢指针,让快指针先走n步,然后快慢指针一起走,直到快指针为空,那么这个时候慢指针对应的元素就是要删除的元素

想法代码

public static ListNode RemoveNthFromEnd(ListNode head, int n)
    {
        if (head == null)
        {
            return null;
        }

        if (head.next == null)
        {
            head = null;
            return head;
        }

        ListNode fast = head;
        ListNode slow = head;
        ListNode temp = null;

        while (fast != null)
        {
            if (n > 0)
            {
                fast = fast.next;
                n--;
            }
            else
            {
                temp = slow;
                slow = slow.next;
                fast = fast.next;
            }
        }

        if (temp == null)
        {
            head = slow.next;
        }
        else
        {
            temp.next = slow.next;
        }
        return head;
    }

20.有效的括号

题目难度:简单
题目要求:
给定一个只包含'('')''['']''{''}'的字符串s,判断是否有效
有效字符串满足

  • 左括号必须用相同类型的右括号闭合
  • 左括号必须以正确的顺序闭合
  • 每个右括号都对应一个相同类型的左括号

示例1

输入:s = “()”
输出:true

示例2

输入:s = “()[]{}”
输出:true

示例3

输入:s = “(]”
输出:false

题解

最开始的想法:利用栈可以轻松的做出这道题,当遍历到左括号的时候,入栈相对应的右括号,当遍历到右括号的时候,如果栈内没有元素或者出栈的元素不是对应的右括号,直接返回false;如果最后栈内仍有元素,那么也返回false

想法代码

public static bool IsValid(string s)
    {
        var len = s.Length;
        if (len % 2 != 0)
        {
            return false;
        }
        var stack = new Stack();
        for (int i = 0; i < len; i++)
        {
            if (s[i] == '(')
            {
                stack.Push(')');
            }
            else if (s[i] == '[')
            {
                stack.Push(']');
            }
            else if (s[i] == '{')
            {
                stack.Push('}');
            }
            else if (stack.Count == 0 || stack.Pop() != s[i])
            {
                return false;
            }
        }

        if (stack.Count > 0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }

你可能感兴趣的:(算法进修,算法,leetcode,c#)