算法训练营0518——数组链表跳表

数组

在这里插入图片描述
在这里插入图片描述

链表

在这里插入图片描述
每个元素,一般都要定义一个class,两个成员变量(value、next)

T代表泛型
数组
在这里插入图片描述
Linklist链表
在这里插入图片描述

跳表

只可用于有序的情况
对标平衡树和二分查找。原始的有序序列添加多级索引,升维+空间换时间

在这里插入图片描述

二分查找,可以很快的查到一个有序的序列中某个数的存在
在这里插入图片描述
8大于1,往后走,到4,8大于4,到7,8大于7,继续往后走,直到8小于9,则又从7往下面走,开始找
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

时间复杂度

数组 :插入删除是o(n),lookup是o(1)
链表:插入,删除都是o(1),lookup是o(n)
跳表:插入,删除都是olog(n) lookup也是olog(n) ,空间复杂度O(n)

在这里插入图片描述

283移动零

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

示例:

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

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

class Solution {
    public void moveZeroes(int[] nums) {
        int j = 0;//记录下一个非零元素要放的位置
        for(int i=0;i<nums.length;++i){
            if(nums[i] != 0){
                nums[j] = nums[i];//num[i]放到j所在的位置
                if(i != j){
                    nums[i] = 0;
                }
                j++;//之前非零的元素已经放到j的位置了,j往,后面挪一遍
            }
        }

    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值