ARTS是什么? Algorithm:每周至少做一个LeetCode的算法题 Review:阅读并点评至少一篇英文技术文章 Tip:学习至少一个技术技巧,总结和归纳日常工作中遇到的知识点 Share:分享一篇有观点和思考的技术文章

Algorithm

完成leetcode算法第229题。
使用哈希表存储每个元素出现的次数,然后和数组长度做比对,返回所有符合条件的数据
进阶解法:摩尔投票法(待实现)

  1. import java.util.*;
  2. /**
  3. * 给定一个大小为n的整数数组,找出其中所有出现超过[ n/3 ]次的元素。
  4. *
  5. * 示例1:
  6. *
  7. * 输入:[3,2,3]
  8. * 输出:[3]
  9. * 示例 2:
  10. *
  11. * 输入:nums = [1]
  12. * 输出:[1]
  13. * 示例 3:
  14. *
  15. * 输入:[1,1,1,3,3,2,2,2]
  16. * 输出:[1,2]
  17. *
  18. *
  19. * 提示:
  20. * 1 <= nums.length <= 5 * 10^4
  21. * -109 <= nums[i] <= 109
  22. *
  23. * 进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题
  24. */
  25. public class MajorityElement229 {
  26. public static void main(String[] args) {
  27. MajorityElement229 example = new MajorityElement229();
  28. int[] nums = new int[]{3,2,3};
  29. System.out.println(example.majorityElement(nums).toString());
  30. nums = new int[]{1};
  31. System.out.println(example.majorityElement(nums).toString());
  32. nums = new int[]{1,1,1,3,3,2,2,2};
  33. System.out.println(example.majorityElement(nums).toString());
  34. }
  35. public List<Integer> majorityElement(int[] nums) {
  36. Map<Integer, Integer> storage = new HashMap<>();
  37. for (int num : nums) {
  38. if (storage.containsKey(num)) {
  39. storage.put(num, storage.get(num) + 1);
  40. } else {
  41. storage.put(num, 1);
  42. }
  43. }
  44. List<Integer> res = new ArrayList<>();
  45. Set<Integer> keys = storage.keySet();
  46. for (Integer key : keys) {
  47. if (storage.get(key) * 3 > nums.length) {
  48. res.add(key);
  49. }
  50. }
  51. return res;
  52. }
  53. }

Review

5 Common mistakes in JAVA
Java中5个常见的错误

  1. “==”表示对象的引用相同,”equals()”表示对象的值相同
  2. 使用equals()时要注意调用方是否为空,如果为空会造成空指针异常,所以一般都会用不为空的对象当调用方
  3. for-each只会在列表中有元素时才进行迭代,所以在for-each中不需要做null的判断
  4. 使用switch时要记得在每个case的末尾加上break,不然程序会一直运行下去,除非你希望它这样
  5. 不要在for-each中remove元素,会触发快速失败;可以使用iterator替代

    Tip

  6. MySQL的delete操作只是标记数据【已删除】,这种标记数据在存储中看着像【黑洞】;insert操作如果伴随着页分裂,也有可能造成这种【黑洞】

  7. alter table 通过将表数据复制到新表,从根本上消除这种【黑洞】,来达到回收表空间的目的,但是这个时候,该表的所有更新操作都会被阻塞
  8. MySQL5.6版本开始,在复制数据的同时,所有的更新操作会记录到row log,等待复制完成然后重放row log,使得alter table的同时也能进行业务操作,这就是online dll。但是这个操作还是会耗费大量IO和CPU,需要选择合适的时间,谨慎操作

    Share

    写文章 - Java的历史与现状

    Finish

    预计完成时间:2021.10.18 ~ 2021.10.24
    实际完成时间:2021.10.24