【搞定左神算法初级班】第6节:前缀树、贪心算法

目 录

一、前缀树:Prefix Tree

1.1 前缀树题目举例:一个字符串类型的数组 arr1,另一个字符串类型的数组 arr2

1.2 前缀树的 insert、delete、search、prefixNum 方法

二、贪心算法

题目1:按最低字典序拼接字符串

题目2:切分金条总代价最小

题目3:最多做 K 个项目的最大利润

题目4:安排最多的宣讲场次


一、前缀树:Prefix Tree

  • 前缀树又叫字典树、Trie 树,单词查找树或键树,是一种多叉树结构。
  • 前缀树的功能很强大,比如有一个字符串数据,我们要从查找其中以“hell”开头的(设置一个passN),或者以"ive"结尾的字符的个数等等操作。我们只需要在定义前缀树的时候加上相应得数据项就可以了。
  • 建议:字母用边表示,不要塞到节点里【具体看代码实现】。

1.1 前缀树题目举例:一个字符串类型的数组 arr1,另一个字符串类型的数组 arr2

题目1、 arr2中有哪些字符,是arr1中出现的?请打印。

  • 返回树中有多少个要求查找的单词 public int search(String word) 的变体。

题目2、arr2中有哪些字符,是作为arr1中某个字符串前缀出现的?请打印。

  • 有多少单词以pre为前缀  public int prefixNumber(String pre)的变体。

题目3、arr2中有哪些字符,是作为arr1中某个字符串前缀出现的?请打印arr2中出现次数最大的前缀。

  • 有多少单词以pre为前缀   public int prefixNumber(String pre),找最大的个。

1.2 前缀树的 insert、delete、search、prefixNum 方法

  • 几种方法的代码相似度很高,前半部分基本一样,都是从 root 开始遍历;
  • 假设刚开始我们,有一个空节点,现在我们有一个操作,往这个空的节点上insert字符串“abc”, 那么我们按照下面的步骤insert:

  • process: 1、首先看当前节点有没有指向字符'a'的路径,没有的话就创建指向'a'的路径,否则滑过到下一个字符,同样是看看有没有到该字符的路径。一直遍历完字符,并且都创建好了路径。如下图所示: 

  • 代码实现
package com.offer.foundation.class5;

/**
 * @author pengcheng
 * @date 2019/3/29 - 22:34
 *
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值