美文网首页
LeetCode从排序数组或者链表中删除重复数字的问题

LeetCode从排序数组或者链表中删除重复数字的问题

作者: 专职跑龙套 | 来源:发表于2018-04-15 23:35 被阅读33次

    关于我的 Leetcode 题目解答,代码前往 Github:https://github.com/chenxiangcyr/leetcode-answers


    LeetCode题目:26. Remove Duplicates from Sorted Array
    Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.

    class Solution {
        public int removeDuplicates(int[] nums) {
            int i = 0;
            
            for(int n : nums) {
                if(i < 1 || n > nums[i - 1]) {
                    nums[i] = n;
                    i++;
                }
            }
            
            return i;
        }
    }
    

    LeetCode题目:80. Remove Duplicates from Sorted Array II
    Follow up for "Remove Duplicates":
    What if duplicates are allowed at most twice?
    For example,
    Given sorted array nums = [1,1,1,2,2,3],
    Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3. It doesn't matter what you leave beyond the new length.

    class Solution {
        public int removeDuplicates(int[] nums) {
            int i = 0;
            
            for(int n : nums) {
                if(i < 2 || n > nums[i - 2]) {
                    nums[i] = n;
                    i++;
                }
            }
            
            return i;
        }
    }
    

    LeetCode题目:83. Remove Duplicates from Sorted List
    Given a sorted linked list, delete all duplicates such that each element appear only once.
    For example,
    Given 1->1->2, return 1->2.
    Given 1->1->2->3->3, return 1->2->3.

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode deleteDuplicates(ListNode head) {
            ListNode cur = head;
            
            while(cur != null && cur.next != null) {
                if(cur.val == cur.next.val) {
                    cur.next = cur.next.next;
                }
                else {
                    cur = cur.next;
                }
            }
            
            
            return head;
        }
    }
    

    LeetCode题目:82. Remove Duplicates from Sorted List II
    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
    For example,
    Given 1->2->3->3->4->4->5, return 1->2->5.
    Given 1->1->1->2->3, return 2->3.

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode deleteDuplicates(ListNode head) {
            ListNode dummyHead = new ListNode(-1);
            dummyHead.next = head;
            
            ListNode pre = dummyHead;
            ListNode cur = head;
            
            while(cur != null) {
                while(cur.next != null && cur.val == cur.next.val) {
                    cur = cur.next;
                }
                
                if(pre.next == cur) {
                    pre = pre.next;
                }
                else {
                    pre.next = cur.next;
                }
                
                cur = cur.next;
            }
            
            return dummyHead.next;
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode从排序数组或者链表中删除重复数字的问题

          本文链接:https://www.haomeiwen.com/subject/xrojkftx.html