1. 1 不可撤销
  2. 2 小年兽 程嘉敏
  3. 3 手放开 李圣杰
  4. 4 迷人的危险3(翻自 dance flow) FAFA
  5. 5 山楂树之恋 程佳佳
  6. 6 summertime cinnamons / evening cinema
  7. 7 不谓侠(Cover 萧忆情Alex) CRITTY
  8. 8 神武醉相思(翻自 优我女团) 双笙
  9. 9 空山新雨后 音阙诗听 / 锦零
  10. 10 Wonderful U (Demo Version) AGA
  11. 11 广寒宫 丸子呦
  12. 12 陪我看日出 回音哥
  13. 13 春夏秋冬的你 王宇良
  14. 14 世界が终わるまでは… WANDS
  15. 15 多想在平庸的生活拥抱你 隔壁老樊
  16. 16 千禧 徐秉龙
  17. 17 我的一个道姑朋友 双笙
  18. 18 大鱼  (Cover 周深) 双笙
  19. 19 霜雪千年(Cover 洛天依 / 乐正绫) 双笙 / 封茗囧菌
  20. 20 云烟成雨(翻自 房东的猫) 周玥
  21. 21 情深深雨濛濛 杨胖雨
  22. 22 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  23. 23 斑马斑马 房东的猫
  24. 24 See You Again Wiz Khalifa / Charlie Puth
  25. 25 Faded Alan Walker / Iselin Solheim
  26. 26 Natural J.Fla
  27. 27 New Soul Vox Angeli
  28. 28 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  29. 29 像鱼 王贰浪
  30. 30 Bye Bye Bye Lovestoned
  31. 31 Blame You 眠 / Lopu$
  32. 32 Believer J.Fla
  33. 33 书信 戴羽彤
  34. 34 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  35. 35 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  36. 36 慢慢喜欢你 LIve版(翻自 莫文蔚) 戴羽彤
  37. 37 病变(翻自 cubi) 戴羽彤
  38. 38 那女孩对我说 (完整版) Uu
  39. 39 绿色 陈雪凝
  40. 40 月牙湾 LIve版(翻自 F.I.R.) 戴羽彤
夜空中最亮的星(翻自 逃跑计划) - 戴羽彤
00:00 / 04:10

夜空中最亮的星 能否听清

那仰望的人 心底的孤独和叹息

夜空中最亮的星 能否记起

那曾与我同行 消失在风里的身影

我祈祷拥有一颗透明的心灵

和会流泪的眼睛

给我再去相信的勇气

越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请指引我靠近你

夜空中最亮的星 是否知道

那曾与我同行的身影 如今在哪里

夜空中最亮的星 是否在意

是等太阳先升起 还是意外先来临

我宁愿所有痛苦都留在心底

也不愿忘记你的眼睛

哦 给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行 哒~

我祈祷拥有一颗透明的心灵

和会流泪的眼睛 哦

给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行

2021.05.14 罗马数字转整数

题目来源:力扣(LeetCode

链接:https://leetcode-cn.com/problems/roman-to-integer/

难度:简单

罗马数字包含以下七种字符: IVXLCDM

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 罗马数字 2 写做 II ,即为两个并列的 112 写做 XII ,即为 X + II27 写做 XXVII, 即为 XX + V + II

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

示例 1:

输入: "III"
输出: 3

示例 2:

输入: "IV"
输出: 4

示例 3:

输入: "IX"
输出: 9

示例 4:

输入: "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.

示例 5:

输入: "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

提示:

  • 1 <= s.length <= 15
  • s 仅含字符 ('I', 'V', 'X', 'L', 'C', 'D', 'M')
  • 题目数据保证 s 是一个有效的罗马数字,且表示整数在范围 [1, 3999]
  • 题目所给测试用例皆符合罗马数字书写规则,不会出现跨位等情况。
  • IL IM 这样的例子并不符合题目要求,49 应该写作 XLIX,999 应该写作 CMXCIX
  • 关于罗马数字的详尽书写规则,可以参考 罗马数字 - Mathematics

提交记录

这个题我没发现有什么奇特的解法,基本就是根据题目描述,然后用代码实现。首先创建了一个字典map,存放映射关系,变量定义成静态变量的好处是,Solution类在实例化的时候,该部分代码就会被初始化,不会增加系统执行方法时的性能,会更快。

class Solution {
    private static final Map<Character, Integer> charIntMap = new HashMap<>();
    static {
        charIntMap.put('I', 1);
        charIntMap.put('V', 5);
        charIntMap.put('X', 10);
        charIntMap.put('L', 50);
        charIntMap.put('C', 100);
        charIntMap.put('D', 500);
        charIntMap.put('M', 1000);
    }

    public int romanToInt(String s) {
        char[] chars = s.toCharArray();
        int sum = 0;
        for (int i = 0; i < chars.length; i++) {
            if (i >= 1 && chars[i - 1] == 'I' && (chars[i] == 'V' || chars[i] == 'X')) {
                sum += charIntMap.get(chars[i]) - 2;
            } else if (i >= 1 && chars[i - 1] == 'X' && (chars[i] == 'L' || chars[i] == 'C')) {
                sum += charIntMap.get(chars[i]) - 20;
            } else if (i >= 1 && chars[i - 1] == 'C' && (chars[i] == 'D' || chars[i] == 'M')) {
                sum += charIntMap.get(chars[i]) - 200;
            } else  {
                sum += charIntMap.get(chars[i]);
            }
        }
        return sum;
    }
}

性能也还不错,执行用时超过了70%的提交记录:

内存方面更是优秀,超过了96%的提交记录

但是如果把map放进方法内部,性能就差太远了。经过实测,确实如果直接把字典初始化这块放到方法内部,不论是执行用时,还是内存消耗都会增加(最新的提交记录是我们把map放到方法内部的结果):

这也说明,常量定义成静态的,会让我们的系统性能更好,效率更高。

总结

学习算法真正的意义是让我们可以开发出性能更好的、效率更高的系统,当你慢慢知道了一行无用或者不合理的代码,甚至多创建一个变量都会影响系统性能的时候,你才能在写每一行代码的时候更谨慎,慢慢积累,你才能写出更优质的代码。更多时候,你不够优秀,并非是你不不上进、不努力,而是你没看到更优秀的人……当然,你也可以当一个咸鱼,但有机会的时候,也要记得翻个身哦,毕竟两面晒才好吃

posted @ 2021-05-15 10:08  云中志  阅读(282)  评论(0编辑  收藏  举报