ARTS是什么? Algorithm:每周至少做一个LeetCode的算法题 Review:阅读并点评至少一篇英文技术文章 Tip:学习至少一个技术技巧,总结和归纳日常工作中遇到的知识点 Share:分享一篇有观点和思考的技术文章
Algorithm
完成leetcode算法第229题。
使用哈希表存储每个元素出现的次数,然后和数组长度做比对,返回所有符合条件的数据
进阶解法:摩尔投票法(待实现)
import java.util.*;/*** 给定一个大小为n的整数数组,找出其中所有出现超过[ n/3 ]次的元素。** 示例1:** 输入:[3,2,3]* 输出:[3]* 示例 2:** 输入:nums = [1]* 输出:[1]* 示例 3:** 输入:[1,1,1,3,3,2,2,2]* 输出:[1,2]*** 提示:* 1 <= nums.length <= 5 * 10^4* -109 <= nums[i] <= 109** 进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题*/public class MajorityElement229 {public static void main(String[] args) {MajorityElement229 example = new MajorityElement229();int[] nums = new int[]{3,2,3};System.out.println(example.majorityElement(nums).toString());nums = new int[]{1};System.out.println(example.majorityElement(nums).toString());nums = new int[]{1,1,1,3,3,2,2,2};System.out.println(example.majorityElement(nums).toString());}public List<Integer> majorityElement(int[] nums) {Map<Integer, Integer> storage = new HashMap<>();for (int num : nums) {if (storage.containsKey(num)) {storage.put(num, storage.get(num) + 1);} else {storage.put(num, 1);}}List<Integer> res = new ArrayList<>();Set<Integer> keys = storage.keySet();for (Integer key : keys) {if (storage.get(key) * 3 > nums.length) {res.add(key);}}return res;}}
Review
5 Common mistakes in JAVA
Java中5个常见的错误
- “==”表示对象的引用相同,”equals()”表示对象的值相同
- 使用equals()时要注意调用方是否为空,如果为空会造成空指针异常,所以一般都会用不为空的对象当调用方
- for-each只会在列表中有元素时才进行迭代,所以在for-each中不需要做null的判断
- 使用switch时要记得在每个case的末尾加上break,不然程序会一直运行下去,除非你希望它这样
不要在for-each中remove元素,会触发快速失败;可以使用iterator替代
Tip
MySQL的delete操作只是标记数据【已删除】,这种标记数据在存储中看着像【黑洞】;insert操作如果伴随着页分裂,也有可能造成这种【黑洞】
- alter table 通过将表数据复制到新表,从根本上消除这种【黑洞】,来达到回收表空间的目的,但是这个时候,该表的所有更新操作都会被阻塞
- MySQL5.6版本开始,在复制数据的同时,所有的更新操作会记录到row log,等待复制完成然后重放row log,使得alter table的同时也能进行业务操作,这就是online dll。但是这个操作还是会耗费大量IO和CPU,需要选择合适的时间,谨慎操作
Share
写文章 - Java的历史与现状Finish
预计完成时间:2021.10.18 ~ 2021.10.24
实际完成时间:2021.10.24
