牛客网:NC124 字典树的实现

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

链表实现

package com.company.test.字典树的实现;

/**
 * @author xienl
 * @description 字典树的实现
 * @date 2022/8/23
 */

public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();

    }

    public String[] trieU (String[][] operators) {
        // write code here
        int len = 0;
        for (String[] operator : operators) {
            if (operator[0].equals("3") || operator[0].equals("4")){
                len++;
            }
        }
        Trie trie = new Trie();
        String[] res = new String[len];
        int index = 0;
        for (String[] operator : operators) {
            if (operator[0].equals("1")){
                trie.insert(operator[1]);
            }

            if (operator[0].equals("2")){
                trie.delete(operator[1]);
            }

            if (operator[0].equals("3")){
                boolean search = trie.search(operator[1]);
                res[index++] = search ? "YES" : "NO";
            }

            if (operator[0].equals("4")){
                int num = trie.prefixNumber(operator[1]);
                res[index++] = Integer.toString(num);
            }
        }
        return res;
    }
}

/**
 * 前缀树,链表实现
 */
class Trie{

    /**
     * 节点对象
     */
    class TrieNode{
        int num;
        boolean end;
        TrieNode[] child;
       public TrieNode(){
           this.num = 0;
           this.end = false;
           this.child = new TrieNode[26];
        }

    }

        TrieNode root = new TrieNode();

    /**
     * 增加
     * @param word
     */
    void insert(String word){
        TrieNode node = root;
        char[] chars = word.toCharArray();
        for (int i = 0; i < chars.length; i++){
            char c = word.charAt(i);
            if (node.child[c - 'a'] == null){
                node.child[c - 'a'] = new TrieNode();
            }
            node = node.child[ c - 'a'];
            node.num++;
        }
        node.end = true;
    }

    /**
     * 删除
     * @param word
     */
    void delete(String word){
        TrieNode node = root;
        char[] chars = word.toCharArray();
        for (char c : chars){
            node = node.child[c - 'a'];
            node.num--;
        }
        node.end = false;
    }

    /**
     * 查找
     * @param word
     * @return
     */
    boolean search(String word){
        TrieNode node = root;
        char[] chars = word.toCharArray();
        for (char c : chars) {
            if (node.child[c - 'a'] == null){
                return false;
            }
            node = node.child[c - 'a'];
        }
        return node.end;
    }

    int prefixNumber(String pre){
        TrieNode node = root;
        char[] chars = pre.toCharArray();
        for (char c : chars) {
            if (node.child[c - 'a'] == null){
                return 0;
            }
            node = node.child[c - 'a'];
        }
        return node.num;
    }
}

数组实现

package com.company.test.字典树的实现;

/**
 * @author xienl
 * @description 字典数数组实现
 * @date 2022/8/23
 */

public class Solution2 {
    public static void main(String[] args) {
        Solution solution = new Solution();

    }

    public String[] trieU (String[][] operators) {
            // write code here
            int len = 0;
            for (String[] operator : operators) {
                if (operator[0].equals("3") || operator[0].equals("4")){
                    len++;
                }
            }
            Trie2 trie = new Trie2();
            String[] res = new String[len];
            int index = 0;
            for (String[] operator : operators) {
                if (operator[0].equals("1")){
                    trie.insert(operator[1]);
                }

                if (operator[0].equals("2")){
                    trie.delete(operator[1]);
                }

                if (operator[0].equals("3")){
                    boolean search = trie.search(operator[1]);
                    res[index++] = search ? "YES" : "NO";
                }

                if (operator[0].equals("4")){
                    int num = trie.prefixNumber(operator[1]);
                    res[index++] = Integer.toString(num);
                }
            }
            return res;
    }


}

class Trie2 {
    int n = 700000;
    // 字典数
    int[][] tire;
    // 当前行数
    int[] cnt;
    // 是否结尾
    int[] end;
    int index;

    public Trie2(){
        tire = new int[n][26];
        cnt = new int[n];
        end = new int[n];
        index = 0;
    }

    void insert(String word){
        int cur = 0;
        char[] chars = word.toCharArray();
        for (char c : chars) {
            if (tire[cur][c - 'a'] == 0){
                tire[cur][c - 'a'] = ++index;
            }
            cur = tire[cur][c - 'a'];
            cnt[cur]++;
        }
        end[cur]++;
    }

    void delete(String word){
        int cur = 0;
        char[] chars = word.toCharArray();
        for (char c : chars) {
            cur = tire[cur][c - 'a'];
            cnt[cur]--;
        }
        end[cur]--;
    }

    boolean search(String word){
        int cur = 0;
        char[] chars = word.toCharArray();
        for (char c : chars) {
            if (tire[cur][c - 'a'] == 0){
                return false;
            }
            cur = tire[cur][c - 'a'];
        }
        return end[cur] > 0;
    }

    int prefixNumber(String pre){
        int cur = 0;
        char[] chars = pre.toCharArray();
        for (char c : chars) {
            if (tire[cur][c - 'a'] == 0){
                return 0;
            }
            cur = tire[cur][c - 'a'];
        }
        return cnt[cur];
    }

}

CAN总线开发必看:报文发送类型全解析(含Cycle/Event/CE/IfActive对比) 本文深入解析CAN总线开发中的四种报文发送类型(Cycle/Event/CE/IfActive),对比其核心特征与工程应用场景。通过典型ECU交互案例和决策矩阵,帮助开发者根据实时性、总线效率等需求选择最优方案,并详解信号发送模式与恢复机制,提升车载网络通信可靠性。 阅读详情

相关推荐

Cosmos Transfer2.5多模态AI模型部署与优化实战

多模态AI技术通过融合文本、图像、代码等不同模态数据,实现跨模态理解与生成。其核心原理基于Transformer架构的注意力机制,结合对比学习实现模态对齐。这类技术在智能内容创作、跨模态搜索等领域具有重要价值,尤其适合电商营销图文生成、UI设计转代码等场景。Cosmos Transfer2.5作为先进的多模态模型,支持8192 tokens长文本窗口和混合模态输入,实测推理速度达17.5 samples/s(T4显卡)。部署时需注意FlashAttention优化可提升3倍长文本处理效率,8-bit量化则能

weixin_29038303的博客 281

程序员代码面试指南刷题--第五章.字典树的实现

题目描述 字典树又称为前缀树或者Trie树,是处理字符串常用的数据结构。假设组成所有单词的字符仅是‘a’~‘z’,请实现字典树的结构,并包含以下四个主要的功能。void insert(String word):添加word,可重复添加;void delete(String word):删除word,如果word添加过多次,仅删除一次;boolean search(String word):查询word是否在字典树中出现过(完整的出现过,前缀式不算);int prefixNumber(String pre):

我不是什么好人 483

手把手教你用Python实现最简单的语义通信(Sem Comm)Demo

本文通过Python和PyTorch,手把手教你构建一个基于深度学习的语义通信(Semantic Communication)Demo。该Demo使用自编码器架构,从MNIST图像中提取低维语义特征进行传输与重建,实现了从“传输比特”到“传递含义”的跨越,并探讨了其效率优势与鲁棒性。

weixin_29080843的博客 246

牛客NC124 字典树的实现【中等 前缀树/字典树】

【代码】牛客NC124 字典树的实现【中等 前缀树/字典树】

weixin_37991016的博客 437

VSCode搭配Keil开发STM32:从环境配置到代码跳转全流程(避坑指南)

本文详细介绍了如何使用VSCode搭配Keil进行STM32开发,从环境配置到代码跳转的全流程指南。通过安装必备插件和正确配置项目文件,开发者可以在VSCode中享受现代编辑器的便捷功能,同时保留Keil的编译调试能力,提升嵌入式开发效率。

weixin_28832121的博客 253

告别信息过载:我是如何用Feedly RSS阅读器打造个人专属信息流的(附Chrome插件使用技巧)

本文分享了如何利用Feedly RSS阅读器有效管理信息过载,打造个人专属信息流的方法。通过科学组织订阅源、智能过滤和跨平台同步技巧,帮助用户从被动接收转为主动筛选,提升信息获取效率。特别推荐使用Feedly的Chrome插件和AI过滤功能,实现高效的信息管理。

weixin_42526015的博客 355

牛客2018国庆day1 D Love Live!(01字典树+并查集+启发式合并)

参考这篇博客:https://blog.youkuaiyun.com/lzc504603913/article/details/82931895 思路:先把边按权值小到大排序,这样每次取的边一定是已有的树中权值最大的,用并查集维护每个点的根节点是多少,每次取的边会有左右子树,又因为用并查集维护了,所以可以知道这条边的两个节点的根,因为每个根都有它自己的01字典树(为什么要查询根的01字典树?因为这样可以重复...

tingwangshi的博客 277

RimWorld Mod开发避坑指南:从Defs命名规范到XML结构详解(附实战代码)

本文深入解析RimWorld Mod开发中Defs文件的编写规范与高级技巧,涵盖命名冲突预防、XML结构优化及高级功能实现。通过实战代码示例,帮助开发者避开常见陷阱,提升Mod兼容性与稳定性,特别适合RimWorld Mod开发者参考。

weixin_30790841的博客 450

牛客练习赛11 - B 假的字符串 (字典树+拓扑排序)

链接:https://www.nowcoder.com/acm/contest/59/B来源:牛客网题目描述给定n个字符串,互不相等,你可以任意指定字符之间的大小关系(即重定义字典序),求有多少个串可能成为字典序最小的串,并输出它们 输入描述:第一行一个数表示n 之后n行每行一个字符串表示给定的字符串输出描述:第一行输出一个数x表示可行的字符串个数 之后输出x行,每行输出一个可行的字符串 输出的顺...

Mr_Treeeee的博客 758

rk3588上适配wifi模组aic8800

记录一下在rk3588上调试aic8800,调试分为Debian11以及Android12两个平台,这里主要是讲过程以及修改的过程,以补丁的形式来提供解决方法。在Debian11下主要通过配置设备树、编译驱动并自动加载固件完成调试,详细介绍了设备树修改、驱动编译脚本调整和驱动加载流程。

m0_60805802的博客 1004

如何在飞腾平台上安装Ubuntu操作系统

注意: 若主板上配置的是NVME硬盘,在进行内核配置时,需要将内核的NEME驱动勾选上,否则移植内核时,无法找到文件系统,进不去操作系统。可以通过rufus软件将镜像做到U盘中,本次使用版本为Rufus 3.9.124 ,其他版本也可以。不要下载live版本的,没有准备网络环境,是一个头疼的事情,笔者暂时没有实现网络安装。将U盘接到主板usb口上,接上串口,显示器,,必需串口有打印才可以安装。可以通过dd命令,将iso安装到U盘。安装的是最小系统,缺少很多命令,需要联网更新,或则更换飞腾专用内核。

技术联盟 2645

字典树(Trie树) Java实现源码参考

定义 字典树,又称为单词查找树,Tire数,是一种树形结构,它是一种哈希树的变种。用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。 字典树结构对应的Java源码 public class Trie { char val; boolean isEnd = false; Trie[] subChildren = new Trie[26]; ...

明月专栏 955

Microsoft AI SDK 与 SAP ABAP:让企业级 AI 能力触手可及的深度整合指南

借助 Microsoft AI SDK,ABAP 开发者无需跳出熟悉的事务码与数据字典,就能把 GPT‑4 的强大语言理解与生成能力深度植入采购、销售、财务等核心业务流程。只要掌握“初始化 SDK → 构造 Prompt → 解析输出”这一范式,未来无论 Azure OpenAI、OpenAI 还是本地化 LLM,都能在同一套代码骨架内快速切换,实现真正的“AI 即服务”。现在,就让我们在下一行 ABAP 里拥抱智能未来。参考链接均于 2025‑07‑22 提取,推荐读者结合实际版本进一步验证。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 431

牛客_字典树的实现

【代码】牛客_字典树的实现。

d3y1`5 81_09 250

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

2022.5.15 高频重点算法题

面试基础的算法题,按照出现的频率进行练习,虽然很多题都是做过的,但是多做几遍之后,又发现了一些新的不错的思路。周末的小尾巴~。 题目来源于牛客网平台,一个不错的练习算法的平台。 如果觉得文章有帮助的,麻烦三连一下欧。

忆_恒心的博客 439

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

字典树 java实现

import java.util.Map; import java.util.TreeMap; public class Trie { private int size; private TrieNode root; public Trie() { size = 0; root = new TrieNode(); } ...

w535921917的博客 480

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

牛客-[NOIP2017]图书管理员——字典树or排序取模

文章目录题目题目详解解题代码法一:字典树法二:排序+取模判断 题目 题目链接 题目详解 这题也有两种做法,而且都不慢。 改造字典树的做法: 我们用书的编号建立字典树,每次插入一段编号,从尾部开始分解,进行字典树的建立,字典树的每一个结点存下这个尾部对应的最大前缀即可。建立好字典树后,查找过程也只需要查查一下即可得到结果。时间复杂度插入为O(n),查询为O(n),这里的n指的都是编号的长度。实际上此题编号长度不会超过9,所以完全可以视作是常数级别的复杂度。所以整个插入和查询过程可以看作是O(n)和O(m)

CppYyds的博客 366

牛客 单词查找树 题解(字典树 Tire)

①注意单词的输入方式 ②注意题中给的都是大写字母 #include<iostream> using namespace std; const int N = 1e4 + 10; int son[N][26], idx; char str[N]; void insert(char str[]){ int p = 0; for(int i = 0; str[i]; i ++ ){ int u = str[i] - 'A'; if(!son[p][u]) son[p][u] = +

qiaodxs的博客 201

牛客练习赛53,C(字典树+暴力)

想到了字典树求解,但是TLE了,后来分析发现当询问的字符串中"_"的个数一多的话,我这个算法很容易就超时。不过因为我觉得这个算法其实还是可以的,而且以前也有过这种情况,所以就分类讨论,当询问的字符串中的“1”或“0”的个数超过20个时,我就用字典树求解,否则我就暴力求解。结果是200MS过题。 #include<cstdio> #include<iostream> #inc...

shamansi99的博客 185

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 197

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 306

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 567

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 20

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 748

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 367

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 170
上一篇: 力扣:655. 输出二叉树
下一篇: 牛客网:NC125 和为K的连续子数组
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值