所谓ARTS: 每周至少做一个LeetCode的算法题;阅读并点评至少一篇英文技术文章;学习至少一个技术技巧;分享一篇有观点和思考的技术文章。(也就是Algorithm、Review、Tip、Share 简称ARTS)这是第十二期打卡。
今天早上更新版本,出现了小插曲,让自己惊出一身冷汗。没想到看到了一篇deadlines的文章,让我好像知道了点什么,也把小插曲的事情忘记了。或许,这就是技术的魅力所在吧。
最大子序和 (https://leetcode-cn.com/problems/maximum-subarray/)
题目描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例 1:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
算法题,就是考察你对算法的熟悉程度,然鹅,小编因为没怎么熟悉,所以经常使用不是很厉害的算法来解题,好尴尬的。
今天这个,小编的第一反应自然就是用循环解法,没想到做完了,才发现,这个叫动态递归,哈哈。其实就是以连续数组结束位置为每一步的解,sum其实就是记录了上一步骤的解,在这个步骤上进行对比,如果上一步的解小于0,那自然就舍弃了。得到当前步骤的解,与之前步骤解的最大值result进行比较,自然就知道答案了。
public static int maxSubArray(int[] nums) {
int sum = 0;
int result = nums[0];
for (int i : nums) {
sum = sum > 0 ? sum + i : i;
if (result < sum) {
result = sum;
}
}
return result;
}
当然啦,这题提示还有一个解法是通过分治法解决的,思路就是通过递归分治不断的缩小规模,问题结果就有三种,左边的解,右边的解,中间的解,得到三个解通过比较大小即可。思路给你啦,因为也不是小编的解答,所以,这里,你自己去试试看吧。
How to make peace with deadlines in software development (https://medium.com/free-code-camp/how-to-make-peace-with-deadlines-in-software-development-6cfe3e993f51)
说来也巧,今天通过朋友的努力,让我出去呼吸了下新鲜空气,正好碰到打卡的日子,顺带去看一篇文章。这篇又是标题吸引了我,在我们软件开发的过程中,经常会有各种deadlines,前段时间还因为这个deadlines没确定好的问题,引起了一些不必要的麻烦,在这里就不详细赘述了。
那么如何很好的确定一个deadlines呢?在文中给出了以下11点,为了让我的翻译不迷惑大家,我在这里就把原文的标题给出来了,感兴趣的朋友可以参考原文哦。这里的11点,是作者做的精华总结,真的很赞,值得大家好好品味。
一个好的deadlines的建立,不仅仅需要各方面的能力,还得是自己有能力来做判断。比如第4点,如果技术不够,认清不了现实,那肯定是很难制定出来了。
还有最后一条,一个项目的完成,肯定是一个团队努力的结果。所以,沟通是最最重要的,良好的沟通胜过很多无用功。当然啦,沟通也是有技巧的,怎么做,还得从实际情况实际出发来说,这里小编暂时也没有给出太多的意见来了那就。
Java的技术栈,到上一次为止,先结束了。今天和下次,我将给大家分享下Android的存储优化相关。这是第一篇。
“将特定结构的数据转化为另一种能被记录和还原的格式”
数据存储六个关键要素:正确性、时间开销、空间开销、安全、开发成本和兼容性。
我们今天主要来讲讲Android常用的序列化方法如何进行选择。
Parcel序列化和Java的Serializable序列化差别还是比较大的,Parcelable只会在内存中进行序列化操作,并不会将数据存储到磁盘里。
**Parcelable的注意事项**
事实上,关于序列化基本每个大公司都会自己自研的一套方案,我在专栏里推荐Twitter开源的高性能序列化方案Serial。
从数据上来看,Serial在序列化与反序列化耗时,以及落地的文件大小都有很大的优势
从实现原理看,Serial就像是吧Parcelable和Serializable的优点集合在一起的方案
这周还是继续在设计模式的世界里前行中。
公众号地址: 设计模式之工厂模式(二) 爱生活,爱学习,爱感悟,爱挨踢