zoukankan      html  css  js  c++  java
  • 数组&链表和跳表

    数组

    面对频繁的增删改,数组是非常的不方便,时间复杂度很高

    链表

    node和head

    单链表:只有一个next指针

    双链表:有next和pre两个指针,既能往后面走也能往前面走

    循环链表:最后一个next指向head

    java的指针是双链表

    增加删除结点

    pre结点的next指向new 节点,new的next指向后继的结点,时间复杂度是O(1)
    删除节点是新增节点的反操作

    数组和链表操作的时间复杂度

    链表:
    prepend: O(1)

    APPEND: O(1)
    LOOKUP:O(N) 这个的时间复杂度比较高
    instert:O(1)
    DELETE:O(1)

    ARRAY:

    prepend: O(1)
    APPEND: O(1)
    LOOKUP:O(1)
    instert:O(N)
    DELETE:O(N)

    跳表

    以理解工作原理为主

    为了优化或者补足链表的缺陷

    优化的思想:升维,空间换时间

    移动零

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序

    示例:

    输入: [0,1,0,3,12]
    输出: [1,3,12,0,0]
    说明:

    必须在原数组上操作,不能拷贝额外的数组。
    尽量减少操作次数。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/move-zeroes

    题解

    比较简单的一个题,那遇到0就交换一下 swap,遇到0交换一下

    
    def movezero(self,nums):
          zero = 0
          for i in range(len(nums)):
                if nums[i]!=0:
                      nums[i],nims[zero]=nums[zero],nums[i]
                      zero+=1
    
    
  • 相关阅读:
    浅谈vue对seo的影响
    JavaScript this 关键字
    css3新增特性
    JavaScript 严格模式(use strict)
    let,var,const的区别
    vue slot内部组件插槽
    正则表达式的字母意义
    Array数组对象的方法
    ArcGis for js React 初始化安装
    HTML 基础
  • 原文地址:https://www.cnblogs.com/gaowenxingxing/p/13833927.html
Copyright © 2011-2022 走看看