0
点赞
收藏
分享

微信扫一扫

爬虫ip池越大越好吗?

青青子衿谈育儿 2023-08-13 阅读 42

为什么

public int titleToNumber(String columnTitle) {int number = 0;
       int sum = 0;
       for (int i = 0; i < columnTitle.length(); i++) {

           int temp = (int) (columnTitle.charAt(i) -64);
           System.out.println(temp);
           double sum1 = temp * Math.pow(26, columnTitle.length() - 1 - i);
           System.out.println(sum1);
           sum+= sum1;

       }
       return sum;
   }

 public static int titleToNumber(String columnTitle) {
        int sum = 0;
        for (int i = 0; i < columnTitle.length(); i++) {

            sum = sum * 26 + (columnTitle.charAt(i) - 64);

        }
        return sum;
    }

的效率高?

两者之间的主要差异在于他们的计算方法,但他们都用于将Excel的列标题(如"A", "Z", "AA"等)转换为对应的整数。让我们分析一下它们的性能差异。

  1. 第一个方法 (titleToNumber with Math.pow):

    • 对于每个字符,你使用Math.pow(26, columnTitle.length() - 1 - i)来计算权重。Math.pow()是一个相对耗时的操作,尤其是在循环中多次调用它。
  2. 第二个方法:

    • 你直接通过sum = sum * 26 + (columnTitle.charAt(i) - 64);的方式更新总和。这样做的复杂度是O(1)。

当我们比较这两个方法时:

  • 对于第一个方法,你为每个字符都调用了Math.pow(),这增加了其时间复杂度。因此,尽管两种方法在高层面上都是O(n)的,其中n是columnTitle的长度,但由于Math.pow()的开销,第一个方法的实际执行时间会更长。

  • 第二个方法更为直接和简洁,它避免了额外的计算开销。

因此,第二种方法的性能优于第一种方法。如果你在考虑性能,那么应该选择第二种方法。

举报

相关推荐

0 条评论