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

Algorithm

完成leetcode算法第169题.
使用分治算法的思想完成。

  1. /**
  2. * 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋的元素。
  3. *
  4. * 你可以假设数组是非空的,并且给定的数组总是存在多数元素。
  5. * 示例1:
  6. * 输入:[3,2,3]
  7. * 输出:3
  8. *
  9. * 示例2:
  10. * 输入:[2,2,1,1,1,2,2]
  11. * 输出:2
  12. * @author ouyb01
  13. * @date 2021/12/27 12:59
  14. */
  15. public class MajorityElement169 {
  16. /**
  17. * 如果数 a 是数组 nums 的众数,如果我们将 nums 分成两部分,那么 a 必定是至少一部分的众数
  18. */
  19. public int majorityElement(int[] nums) {
  20. return majorityElementRec(nums, 0, nums.length - 1);
  21. }
  22. private int majorityElementRec(int[] nums, int s, int e) {
  23. // 如果开始和结束下标重合, 直接返回
  24. if (s == e) {
  25. return nums[s];
  26. }
  27. int mid = (e - s) / 2 + s;
  28. int left = majorityElementRec(nums, s, mid);
  29. int right = majorityElementRec(nums, mid + 1, e);
  30. if (left == right) {
  31. return left;
  32. }
  33. // 如果不相等则计算看那边的数量多
  34. int leftCount = countInRange(nums, left, s, e);
  35. int rightCount = countInRange(nums, right, s, e);
  36. return leftCount > rightCount ? left : right;
  37. }
  38. private int countInRange(int[] nums, int num, int s, int e) {
  39. int count = 0;
  40. for (int i = s; i <= e; i++) {
  41. if (nums[i] == num) {
  42. count++;
  43. }
  44. }
  45. return count;
  46. }
  47. public static void main(String[] args) {
  48. MajorityElement169 example = new MajorityElement169();
  49. int[] nums = new int[]{3, 2, 3};
  50. System.out.println(example.majorityElement(nums));
  51. nums = new int[]{2, 2, 1, 1, 1, 2, 2};
  52. System.out.println(example.majorityElement(nums));
  53. }
  54. }

Review

Why you need to use DTO’s in your REST API

Tip

最近在看极客专栏《从0开始学架构》,感觉受益良多,总结一下刷新我观点的一些思想。

  1. 架构是顶层设计;框架是面向编程或配置的半成品;组件是从技术维度上的复用;模块是从业务维度上职责的划分;系统是相互协同可运行的实体
  2. 划分模块的主要目的是职责分离;划分组件的主要目的是单元复用

Share

MapStruct实践[

](https://www.yuque.com/yigenranshaodexiongmao/fgx0oh/vz15x7)

Finish

预计完成时间:2021.12.27 ~ 2022.01.03
实际完成时间:2022.01.03