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


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

    这是我对表驱动的一点认识,我觉得选择表驱动,提高代码的执行效率以及可读性,但同时却牺牲了存储空间。如果在不浪费大量空间的前提下,表驱动的确是一个不错的选择。
  • 相关阅读:
    SVM(支持向量机)(一)
    Locally weighted linear regression(局部加权线性回归)
    Linear Regression(线性回归)(三)—代价函数J(θ)选择的概率解释
    Linear Regression(线性回归)(二)—正规方程(normal equations)
    Linear Regression(线性回归)(一)—LMS algorithm
    串的模式匹配算法(一)—朴素的模式匹配算法
    C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数
    依次将10个数输入并将其最大值输出
    C语言学习<输入输出函数,函数的调用>
    Linux学习笔记02
  • 原文地址:https://www.cnblogs.com/xiayong123/p/3717596.html
Copyright © 2020-2023  润新知