表驱动分为三种,分别是:直接索引、索引表、阶梯索引

2024-02-13 07:32

本文主要是介绍表驱动分为三种,分别是:直接索引、索引表、阶梯索引,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

表驱动分为三种,分别是:直接索引、索引表、阶梯索引。一般直接索引使用比较广泛,也容易想到。今天在网上看到了一笔试题,统计一个字符串中第一次出现且频率最高的字符。看到这道题以后,我觉得使用表驱动能很快、很容易地解决问题,下面是我使用表驱动给出的解法。
Java代码 复制代码 收藏代码
  1. public static char statMostRateChar(String str) {
  2. if (str != null && !"".equals(str)) {
  3. int charsStat[] = new int[128];
  4. int charsFirstIdx[] = new int[128];
  5. int strLen = str.length();
  6. for (int ch = 0; ch < 128;ch++) {
  7. charsFirstIdx[ch] = strLen;
  8. }
  9. // 統計字符出現的次數
  10. for (int idx = 0; idx < strLen; idx++) {
  11. charsStat[str.charAt(idx)]++;
  12. // 记录字符第一次出现的位置
  13. if (idx < charsFirstIdx[str.charAt(idx)]) {
  14. charsFirstIdx[str.charAt(idx)] = idx;
  15. }
  16. }
  17. int mostRateChar = 0;
  18. for (int ch = 1; ch < 128; ch++) {
  19. if (charsStat[ch] == 0) {
  20. continue;
  21. }
  22. // 找频率出现最高的字符
  23. if (charsStat[mostRateChar] < charsStat[ch]) {
  24. mostRateChar = ch;
  25. // 出现频率一样时,选择出现在前面的数
  26. } else if (charsStat[mostRateChar] == charsStat[ch]&&
  27. charsFirstIdx[mostRateChar] > charsFirstIdx[ch]) {
  28. mostRateChar = ch;
  29. }
  30. }
  31. return (char) mostRateChar;
  32. } else {
  33. return '\0';
  34. }
  35. }
public static char statMostRateChar(String str) {
if (str != null && !"".equals(str)) {
int charsStat[] = new int[128];
int charsFirstIdx[] = new int[128];
int strLen = str.length();
for (int ch = 0; ch < 128;ch++) {
charsFirstIdx[ch] = strLen;
}
// 統計字符出現的次數
for (int idx = 0; idx < strLen; idx++) {
charsStat[str.charAt(idx)]++;
// 记录字符第一次出现的位置
if (idx < charsFirstIdx[str.charAt(idx)]) {
charsFirstIdx[str.charAt(idx)] = idx;
}
}
int mostRateChar = 0;
for (int ch = 1; ch < 128; ch++) {
if (charsStat[ch] == 0) {
continue;
}
// 找频率出现最高的字符
if (charsStat[mostRateChar] < charsStat[ch]) {
mostRateChar = ch;
// 出现频率一样时,选择出现在前面的数
} else if (charsStat[mostRateChar] == charsStat[ch]&&
charsFirstIdx[mostRateChar] > charsFirstIdx[ch]) {
mostRateChar = ch;
}
}
return (char) mostRateChar;
} else {
return '\0';
}
}

这是我对表驱动的一点认识,我觉得选择表驱动,提高代码的执行效率以及可读性,但同时却牺牲了存储空间。如果在不浪费大量空间的前提下,表驱动的确是一个不错的选择。

这篇关于表驱动分为三种,分别是:直接索引、索引表、阶梯索引的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/704886

相关文章

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

hdu3389(阶梯博弈变形)

题意:有n个盒子,编号1----n,每个盒子内有一些小球(可以为空),选择一个盒子A,将A中的若干个球移到B中,满足条件B  < A;(A+B)%2=1;(A+B)%3=0 这是阶梯博弈的变形。 先介绍下阶梯博弈: 在一个阶梯有若干层,每层上放着一些小球,两名选手轮流选择一层上的若干(不能为0)小球从上往下移动,最后一次移动的胜出(最终状态小球都在地面上) 如上图所示,小球数目依次为

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

贝壳面试:什么是回表?什么是索引下推?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 1.谈谈你对MySQL 索引下推 的认识? 2.在MySQL中,索引下推 是如何实现的?请简述其工作原理。 3、说说什么是 回表,什么是 索引下推 ? 最近有小伙伴在面试 贝壳、soul,又遇到了相关的

Mysql高级篇(中)——索引介绍

Mysql高级篇(中)——索引介绍 一、索引本质二、索引优缺点三、索引分类(1)按数据结构分类(2)按功能分类(3) 按存储引擎分类(4) 按存储方式分类(5) 按使用方式分类 四、 索引基本语法(1)创建索引(2)查看索引(3)删除索引(4)ALTER 关键字创建/删除索引 五、适合创建索引的情况思考题 六、不适合创建索引的情况 一、索引本质 索引本质 是 一种数据结构,它用

驱动(RK3588S)第七课时:单节点设备树

目录 需求一、设备树的概念1、设备树的后缀名:2、设备树的语法格式3、设备树的属性(重要)4、设备树格式举例 二、设备树所用函数1、如何在内核层种获取设备树节点:2、从设备树上获取 gpio 口的属性3、获取节点上的属性只针对于字符串属性的4、函数读取 np 结点中的 propname 属性的值,并将读取到的 u32 类型的值保存在 out_value 指向的内存中,函数的返回值表示读取到的

[项目][CMP][直接向堆申请页为单位的大块内存]详细讲解

目录 1.系统调用 1.系统调用 Windows和Linux下如何直接向堆申请页为单位的大块内存: VirtualAllocbrk和mmap // 直接去堆上按页申请空间static inline void *SystemAlloc(size_t kpage){#ifdef _WIN32void *ptr = VirtualAlloc(0, kpage << 13,

驱动安装注册表指令

HKCR: HKEY_CLASSES_ROOT HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE HKU: HEKY_USER HER: 相对根键

UMDF驱动安装

VS2013 + WDF8.1,UMDF驱动选择User Mode Driver,不要选User Mode Driver 2.0,否则Win7安装有问题,如图 另外,在驱动安装时不要忘记WUDFUpdate_<主版本号><次版本号>.dll文件,具体文件名在INF中查找。此文件可在WDF的安装目录中找到。注意:在WDF的安装目录中会有3个WUDFUpdate_xxx.dll文件,x86,x6

自定义view中常用到哪些方法作用分别是什么

目录 构造函数onMeasure(int widthMeasureSpec, int heightMeasureSpec)onDraw(Canvas canvas)onLayout(boolean changed, int left, int top, int right, int bottom)onTouchEvent(MotionEvent event)onSizeChanged(int