ARTS (第8周)
开篇词
重视细节。重视实践。
在工作生活和血虚中,如果都没有实践。或者是单纯的只有实践而不注意细节都不行的。
本周:
二叉树
Algorithm 算法
搜索插入位置
https://leetcode-cn.com/problems/search-insert-position/
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
1 | 输入: [1,3,5,6], 5 |
示例 2:
1 | 输入: [1,3,5,6], 2 |
示例 3:
1 | 输入: [1,3,5,6], 7 |
示例 4:
1 | 输入: [1,3,5,6], 0 |
这个题目一看的时候,我就发现了是一个很经典的二分法的题目,就是在数组里找到第一个小于等于目标数的坐标。也和之前在极客时间专栏讲到的知识点十分类似。
这个是我的解法,对比最简单的二分法多了2种判断。
1 | public static int searchInsert(int[] nums, int target) { |
做完的时候看到的最优解法
1 | public int searchInsert2(int[] nums, int target) { |
这个最优解法,代码较少,每次二分都会利用left 保存小于目标数的坐标,直到结束。
如果结束的时候,未找到,因为mid的最后一次的值会是数组的length-1,那么答案就会是数组长度。
PS:对于这两种解法来说,第二种更简约,第一种更容易理解。
另外我还看到一个利用循环遍历的做法,代码我就不贴出来了,这个做法排在第二梯队。根据我的判断,在这题里遍历之所以能排第二,是因为数据量不大。那么假设数据量是100,遍历的执行次数就是100,而二分法的是指数阶的,所以二分法的执行次数是7次。而随着数据量的加大,差距会越来越明显,至于如果是小数据量的场景,这段函数执行的时间都极短,二者之间的差别可以忽略不计。因此在这里我不推荐那种循环遍历的做法。
Review 英文文章
简单介绍了spark。
Tip 技巧
尚硅谷spring注解篇
来源自http://www.gulixueyuan.com/
简单总结了一下常用的注解:
1 |
|
极客时间的专栏《数据结构与算法之美》
本周学习了该专栏中的21-23篇
学习了HASH算法和树的结构。
HASH算法也就是散列、哈希。只是叫法不一样
二叉树
二叉树即是每个节点最多只有2个子节点的树
除了叶子节点外,每个节点都有左右两个子节点,这种二叉树叫做满二叉树。
叶子节点都在最底下两层,最后一层叶子节都靠左排列,并且除了最后一层,其他层的节点个数都要达到最大,这种二叉树叫做完全二叉树。
一般可以用两种方式实现
1、链式存储,即链表。
2、顺序存储,即数组。
有一种常用的储存方式如:
根节点存储在下标为1的位置。
假设某节点存储在数组中的下标为i,那么它的左子节点的存储下标为2i,右子节点的下标为2i+1,
反过来,下标i/2位置存储的就是该节点的父节点。
出处:《数据结构与算法之美》(作者:王争)
[https://time.geekbang.org/column/intro/126]
Share 分享
https://blog.csdn.net/csdnnews/article/details/89956408
互联网人在硅谷:听 Google 资深产品经理 bigjoe 聊聊职业与热爱