ARTS是什么? Algorithm:每周至少做一个LeetCode的算法题 Review:阅读并点评至少一篇英文技术文章 Tip:学习至少一个技术技巧,总结和归纳日常工作中遇到的知识点 Share:分享一篇有观点和思考的技术文章
Algorithm
完成leetcode算法第169题.
使用分治算法的思想完成。
/*** 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋的元素。** 你可以假设数组是非空的,并且给定的数组总是存在多数元素。* 示例1:* 输入:[3,2,3]* 输出:3** 示例2:* 输入:[2,2,1,1,1,2,2]* 输出:2* @author ouyb01* @date 2021/12/27 12:59*/public class MajorityElement169 {/*** 如果数 a 是数组 nums 的众数,如果我们将 nums 分成两部分,那么 a 必定是至少一部分的众数*/public int majorityElement(int[] nums) {return majorityElementRec(nums, 0, nums.length - 1);}private int majorityElementRec(int[] nums, int s, int e) {// 如果开始和结束下标重合, 直接返回if (s == e) {return nums[s];}int mid = (e - s) / 2 + s;int left = majorityElementRec(nums, s, mid);int right = majorityElementRec(nums, mid + 1, e);if (left == right) {return left;}// 如果不相等则计算看那边的数量多int leftCount = countInRange(nums, left, s, e);int rightCount = countInRange(nums, right, s, e);return leftCount > rightCount ? left : right;}private int countInRange(int[] nums, int num, int s, int e) {int count = 0;for (int i = s; i <= e; i++) {if (nums[i] == num) {count++;}}return count;}public static void main(String[] args) {MajorityElement169 example = new MajorityElement169();int[] nums = new int[]{3, 2, 3};System.out.println(example.majorityElement(nums));nums = new int[]{2, 2, 1, 1, 1, 2, 2};System.out.println(example.majorityElement(nums));}}
Review
Why you need to use DTO’s in your REST API
Tip
最近在看极客专栏《从0开始学架构》,感觉受益良多,总结一下刷新我观点的一些思想。
- 架构是顶层设计;框架是面向编程或配置的半成品;组件是从技术维度上的复用;模块是从业务维度上职责的划分;系统是相互协同可运行的实体
- 划分模块的主要目的是职责分离;划分组件的主要目的是单元复用
Share
](https://www.yuque.com/yigenranshaodexiongmao/fgx0oh/vz15x7)
Finish
预计完成时间:2021.12.27 ~ 2022.01.03
实际完成时间:2022.01.03
