• [算法]合并链表&删除数组重复项


    合并链表

    题目

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

    示例:

    输入:1->2->4, 1->3->4
    输出:1->1->2->3->4->4

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/merge-two-sorted-lists

    递归解法

    递归解法的思路每次找出输出的两个链表的最小值,将其next指针指向其他的链元素,再从其他的链元素中寻找最小的值,依此类推。

    当两条链中的一条链为空时,返回另一条链,这样两条链表就通过每次寻找最小值的方法串在了一起。
    JS代码如下

    var mergeTwoLists = function(l1, l2) {
        
        if(l1===null){
            return l2;
        }
        if(l2===null){
            return l1;
        }
        if(l1.val<l2.val){
            l1.next=mergeTwoLists(l1.next,l2);
            return l1;
        }
        else{
            l2.next=mergeTwoLists(l1,l2.next);
            return l2;
        }
    };
    

    删除数组的重复项

    题目

    给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

    不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

    示例 1:

    给定数组 nums = [1,1,2],

    函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。

    你不需要考虑数组中超出新长度后面的元素。
    示例 2:

    给定 nums = [0,0,1,1,1,2,2,3,3,4],

    函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。

    你不需要考虑数组中超出新长度后面的元素。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array

    题目解释

    输入的数组是引用而不是拷贝,return数组更新后的长度。

    快慢指针法

    这是力扣官方的解法,个人感觉神来之笔。
    该解法使用了两个指针i&j:j为快指针,i为慢指针.
    i初始值0,j初始值1;
    j在一个for循环中向后遍历,当nums[i]与nums[j]不相等时,将i++使i继续向后遍历直到发现i与j所指向元素值相同,此时i将不继续遍历,j继续遍历到不相等的元素,将j指向的元素赋给i指向的元素。

    使用例子:
    输入:0012234

    最后i指针指向无重复数组的最后一个元素,则长度为i+1
    JS代码:

    var removeDuplicates = function(nums) {
        if(nums.length===0){
            return 0;
        }
        let i=0;
        for(let j=1;j<nums.length;j++){
            if(nums[i]!==nums[j]){
                i++;
                nums[i]=nums[j];
            }
        }
        return i+1;
    };
    
  • 相关阅读:
    Activity与Fragment间的通信
    Activity生命周期.lanchMode.保存状态
    网络知识
    Android内存优化(使用SparseArray和ArrayMap代替HashMap)
    进程/线程死锁产生的原因以及如何避免死锁
    Android UI框架基本概念
    android在线源码
    y音频学习
    给 Android 开发者的 RxJava 详解
    设计模式之观察者模式
  • 原文地址:https://www.cnblogs.com/liuju/p/12513502.html
Copyright © 2020-2023  润新知