栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode26/83 -- 删除有序数组中的重复项/删除排序链表中的重复元素Java

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode26/83 -- 删除有序数组中的重复项/删除排序链表中的重复元素Java

leetcode26 – 删除有序数组中的重复项

题目描述:

思路:

  • 对于有序序列去重的通用解法使用的是双指针技巧当中的快慢指针技巧
  • 慢指针走在后面,快指针走在前面,找到一个不重复的元素就告诉slow并让slow走一步,然后进行"赋值"

代码实现:

class Solution {
    public int removeDuplicates(int[] nums) {
        // 先判断特殊情况
        if (nums.length == 0){
            return 0;
        }
        int slow = 0;
        int fast = 0;
        // 快指针依次往后面移动, 进行一次次ZQ的判断,
        while (fast < nums.length){
            // 快指针和慢指针所指的值进行比较
            if (nums[fast] != nums[slow]){
                slow++;
                // 维护nums中的值没有重复的
                nums[slow] = nums[fast];
            }
            fast++;
        }
        // 下标是从0开始的,数组长度还要加1
        return slow + 1;
    }
}

小总结:

  • 原地删除可以使用赋值语句来实现,
  • 快慢指针方法可以解决很多问题
leetcode83 – 删除排序链表中的重复元素

题目描述:

思路:

  • 和上题其实是完全一样的,只是把数组赋值操作变成了操作指针而已

代码实现:

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if (head == null){
            return null;
        }
        ListNode slow = head;
        ListNode fast = head;
        while (fast != null){
            if (fast.val != slow.val){
                slow.next = fast;
                // 慢指针也要往后面移动才可以
                slow = slow.next;
            }
            fast = fast.next;
        }
        // 因为最后返回的是一个结果链表,所有最后一个指针后面需要弄成null
        slow.next = null;
        return head;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/671737.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号