zoukankan      html  css  js  c++  java
  • 表驱动分为三种,分别是:直接索引、索引表、阶梯索引

     表驱动分为三种,分别是:直接索引、索引表、阶梯索引。一般直接索引使用比较广泛,也容易想到。今天在网上看到了一笔试题,统计一个字符串中第一次出现且频率最高的字符。看到这道题以后,我觉得使用表驱动能很快、很容易地解决问题,下面是我使用表驱动给出的解法。
    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. }

    这是我对表驱动的一点认识,我觉得选择表驱动,提高代码的执行效率以及可读性,但同时却牺牲了存储空间。如果在不浪费大量空间的前提下,表驱动的确是一个不错的选择。
  • 相关阅读:
    Golang Web入门(3):如何优雅的设计中间件
    Golang Web入门(2):如何实现一个高性能的路由
    基于MySQL 的 SQL 优化总结
    Redis系列(七)Redis面试题
    Redis系列(六)Redis 的缓存穿透、缓存击穿和缓存雪崩
    Redis系列(五)发布订阅模式、主从复制和哨兵模式
    Redis系列(四)Redis配置文件和持久化
    Redis系列(三)Redis的事务和Spring Boot整合
    Redis系列(二)Redis的8种数据类型
    Redis系列(一)Redis入门
  • 原文地址:https://www.cnblogs.com/xiayong123/p/3717596.html
Copyright © 2011-2022 走看看