力扣 1206. 设计跳表

news2024/12/23 13:14:45

Problem: 1206. 设计跳表
在这里插入图片描述

👩‍🏫 参考题解

class Skiplist {
    // 定义跳表的最大层数
    int level = 10;

    // 定义跳表节点类
    class Node {
        int val; // 节点值
        Node[] ne = new Node[level]; // 节点的下一跳节点数组,支持多级索引

        // 构造函数,初始化节点值
        Node (int _val) {
            val = _val;
        }
    }

    Random random = new Random(); // 随机数生成器,用于确定新节点的层级
    Node he = new Node(-1); // 头节点(哨兵节点),初始化值为-1,不存储有效数据

    // 查找目标值t,返回每一层当前节点的位置
    void find(int t, Node[] ns) {
        Node cur = he; // 从头节点开始
        // 从最高层开始查找,逐层向下
        for (int i = level - 1; i >= 0; i--) {
            // 在每一层中,找到小于目标值t的最大节点
            while (cur.ne[i] != null && cur.ne[i].val < t) 
                cur = cur.ne[i];
            // 记录该层找到的节点
            ns[i] = cur;
        }
    }

    // 查找值为t的节点是否存在
    public boolean search(int t) {
        Node[] ns = new Node[level]; // 存储查找过程中每层的位置
        find(t, ns); // 查找t的前驱节点
        // 在最底层检查是否找到t
        return ns[0].ne[0] != null && ns[0].ne[0].val == t;
    }

    // 添加值为t的节点
    public void add(int t) {
        Node[] ns = new Node[level]; // 存储查找过程中每层的位置
        find(t, ns); // 查找t应该插入的位置
        Node node = new Node(t); // 创建新节点
        // 从第0层开始插入节点
        for (int i = 0; i < level; i++) {
            // 在每一层插入节点,并调整指针
            node.ne[i] = ns[i].ne[i];
            ns[i].ne[i] = node;
            // 随机决定是否在更高层插入
            if (random.nextInt(2) == 0) break; // 以1/2的概率决定是否继续在上层插入
        }
    }

    // 删除值为t的节点
    public boolean erase(int t) {
        Node[] ns = new Node[level]; // 存储查找过程中每层的位置
        find(t, ns); // 查找t的位置
        Node node = ns[0].ne[0]; // 获取最底层的第一个后继节点
        // 如果没有找到t,返回false
        if (node == null || node.val != t) 
            return false;
        // 在每一层都移除该节点
        for (int i = 0; i < level && ns[i].ne[i] == node; i++) 
            ns[i].ne[i] = ns[i].ne[i].ne[i];
        return true;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2202994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习之卷积CONV2D

文章目录 1.学习目的2.填充与步幅2.1填充2.2 步幅 3.总结 1.学习目的 卷积听起来简单&#xff0c;事实上不简单&#xff0c;需要多加练习 2.填充与步幅 在前面的例子 图6.2.1中&#xff0c;输入的高度和宽度都为3&#xff0c;卷积核的高度和宽度都为2&#xff0c;生成的输出…

用Python将HTML转换为Excel文件

在数据处理和分析的过程中&#xff0c;经常需要从网页上抓取信息&#xff0c;并将其转换为更易于操作的格式。HTML表格作为一种常见的数据展示方式&#xff0c;在线报告、统计资料等场景中广泛存在&#xff0c;但其结构化程度较低&#xff0c;不利于进一步的数据清洗和分析。将…

微信小程序-APP-软件开发

微信小程序开发&#xff0c;作为当下移动互联网领域的一股强劲势力&#xff0c;正以其便捷性、轻量化及高用户粘性的特点&#xff0c;深刻改变着我们的生活与工作方式。它不仅为企业和个人开发者提供了一个全新的服务入口&#xff0c;更极大地拓宽了商业应用的边界。 在微信小…

2015年国赛高教杯数学建模D题众筹筑屋规划方案设计解题全过程文档及程序

2015年国赛高教杯数学建模 D题 众筹筑屋规划方案设计 众筹筑屋是互联网时代一种新型的房地产形式。现有占地面积为102077.6平方米的众筹筑屋项目&#xff08;详情见附件1&#xff09;。项目推出后&#xff0c;有上万户购房者登记参筹。项目规定参筹者每户只能认购一套住房。  …

游戏录屏必备!五款超实用软件让你轻松记录精彩游戏瞬间

在游戏的世界里&#xff0c;每一个精彩的操作、每一场激烈的对战都值得被记录下来。无论是想要分享给朋友&#xff0c;还是留作自己的游戏回忆&#xff0c;一款优秀的游戏录屏软件都是必不可少的。下面就为大家介绍五款备受好评的游戏录屏软件&#xff0c;让你轻松成为游戏录屏…

【读书笔记·VLSI电路设计方法解密】问题9:什么是SOC发展趋势的推动力

推动SoC趋势的主要力量之一是成本。将更多功能集成到单一芯片中可以减少系统中的芯片数量&#xff0c;从而缩小封装和电路板的成本。这可能会降低整个系统的成本&#xff0c;使产品更具竞争力。在当今的消费电子市场和其他市场中&#xff0c;较低的价格总能带来获得市场份额的优…

激光避障的运行算法!

一、激光传感器的工作原理 激光避障技术利用激光束的直线传播和反射特性&#xff0c;通过发送激光束并接收反射回来的信号&#xff0c;来检测和计算周围障碍物的距离和位置。激光传感器能够生成高精度的距离数据和三维环境信息&#xff0c;为机器人或无人机提供详细的障碍物分…

留学期间如何提高职业竞争力?

留学期间是提高职业竞争力的关键时期&#xff0c;以下是一些具体的建议&#xff0c;帮助留学生在留学期间增强自身的职业竞争力&#xff1a; 一、深化专业知识与技能 1. 专注于课程学习&#xff1a;努力学习专业课程&#xff0c;掌握扎实的专业知识&#xff0c;这是提高职业竞…

qiankun 主项目和子项目都是 vue2,部署在同一台服务器上,nginx 配置

1、主项目配置 1.1 micro.vue 组件 <template><div id"container-sub-app"></div> </template><script> import { loadMicroApp } from qiankun; import actions from /utils/actions.js;export default {name: microApp,mixins: [ac…

颠覆传统!团购新玩法带你零风险狂赚社交红利

你是否曾经被某个看似大胆且充满挑战的商业策略深深吸引&#xff0c;最终却惊喜地发现它在短时间内创造了惊人的价值&#xff1f;今天&#xff0c;我们将一起探索一个别出心裁的商业模式&#xff0c;看看它是如何在短短一个月内实现超过600万的利润奇迹。这不仅仅是一次对商业机…

第十一章:规划过程组 (11.1制定项目管理计划--11.5创建WBS)

11.1 制定项目管理计划 • 项目管理计划可以是概括或详细的&#xff0c;每个组成部分的详细程度取决于具体项目的要求 • 项目管理计划应基准化&#xff0c;即至少应规定项目的范围、时间和成本方面的基准以便据此考核项目执行情况和管理项目绩效。 • 在确定基准之前&#xf…

前端开发攻略---分块加载大数据

一、问题 解决当遇到较大的数据请求&#xff0c;当用户网络较差的时候&#xff0c;需要等很久很久才能拿到服务器的响应结果&#xff0c;如果这个响应结果需要再页面上展示的话&#xff0c;会导致页面长时间白屏的问题 二、实现原理 当发送一个请求时&#xff0c;需要等服务器把…

UM-Net: 重新思考用于息肉分割的ICGNet,结合不确定性建模|文献速递-基于多模态-半监督深度学习的病理学诊断与病灶分割

Title 题目 UM-Net: Rethinking ICGNet for polyp segmentation with uncertainty modeling UM-Net: 重新思考用于息肉分割的ICGNet&#xff0c;结合不确定性建模 01 文献速递介绍 结直肠癌&#xff08;CRC&#xff09;是男性中第三大、女性中第二大常见的恶性肿瘤&#x…

python+pytest+request 接口自动化测试

一、环境配置 1.安装python3 brew update brew install pyenv 然后在 .bash_profile 文件中添加 eval “$(pyenv init -)” pyenv install 3.5.3 -v pyenv rehash 安装完成后&#xff0c;更新数据库 pyenv versions 查看目前系统已安装的 Python 版本 pyenv global 3.5…

[实用工具]Docker安装nextcloud实现私有云服务和onlyoffice

Nextcloud是一款开源的云存储和协作平台&#xff0c;允许用户在自己的服务器上存储和访问文件&#xff0c;同时提供强大的协作工具。它可以替代商业云存储服务&#xff0c;让用户拥有完全控制和自主管理自己的数据。 Nextcloud支持文件上传和下载&#xff0c;可以通过Web界面、…

Android实现RecyclerView宽度变化动画

效果图 实现思路就是定义一个属性动画&#xff0c;在动画监听器中不断修改RecyclerView的宽度 valueAnimator ValueAnimator.ofInt(begin, recyclerView.getWidth() * 2);valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {Overridepublic void …

EasyAnimate

https://github.com/aigc-apps/EasyAnimate/blob/main/README_zh-CN.mdhttps://github.com/aigc-apps/EasyAnimate/blob/main/README_zh-CN.md EasyAnimate v4是一个用于生成高分辨率和长视频的端到端解决方案。我们可以训练基于转换器的扩散生成器,训练用于处理长视频的VAE,…

python35_控制台简单计算年薪

控制台简单计算年薪 def calculate_annual_salary(monthly_salaries):"""计算年薪。参数:monthly_salaries: list of float&#xff0c;每个月的工资列表。返回值:float&#xff0c;用户的年薪。"""annual_salary sum(monthly_salaries)return…

论文作者署名排序是怎么界定的?

人人都想在论文的作者名单中占个位子&#xff0c;特别是一作和通讯作者&#xff0c;我也经常会收到一些人的哭诉&#xff0c;说自己明明做了大部分的工作&#xff0c;但却让别人的名字挂在第一作者。 在厘清一作与通讯作者的意义之前&#xff0c;我们先来看看谁可以署名。目前国…

经典蓝牙BLE版本区别:【图文讲解】

蓝牙是一种短距的无线通讯技术&#xff0c;可实现固定设备、移动设备之间的数据交换。一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙&#xff0c;而将蓝牙4.0规范下的LE蓝牙称为低功耗蓝牙&#xff08;BLE&#xff09;。 1&#xff1a;蓝牙4.0 BLE 4.0版本是3.0版本的升级版本&a…