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