Dimple在左耳听风ARTS打卡(十二)

 
 

所谓ARTS: 每周至少做一个LeetCode的算法题;阅读并点评至少一篇英文技术文章;学习至少一个技术技巧;分享一篇有观点和思考的技术文章。(也就是Algorithm、Review、Tip、Share 简称ARTS)这是第十二期打卡。

今天早上更新版本,出现了小插曲,让自己惊出一身冷汗。没想到看到了一篇deadlines的文章,让我好像知道了点什么,也把小插曲的事情忘记了。或许,这就是技术的魅力所在吧。

Algorithm LeetCode算法

最大子序和
(https://leetcode-cn.com/problems/maximum-subarray/)

题目描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例 1:

输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。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;}
    int sum = 0;
    int result = nums[0];
    for (int i : nums) {
        sum = sum > 0 ? sum + i : i;
        if (result < sum) {
            result = sum;
        }
    }
    return result;
}

当然啦,这题提示还有一个解法是通过分治法解决的,思路就是通过递归分治不断的缩小规模,问题结果就有三种,左边的解,右边的解,中间的解,得到三个解通过比较大小即可。思路给你啦,因为也不是小编的解答,所以,这里,你自己去试试看吧。

Review 阅读并点评至少一篇英文文章

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点,是作者做的精华总结,真的很赞,值得大家好好品味。

  1. Work in a calm environment

  2. Our estimates suck

  3. Good enough is fine

  4. Don’t be too optimistic. Be realistic

  5. Differentiate between “you have to do”, “you could do” and “you want to do”

  6. Say no by default

  7. Never change the deadline

  8. Be aware that there will be always some problems

  9. Don’t add more people to a project

  10. Don’t procrastinate

  11. Communicate: See where is the bottleneck?

一个好的deadlines的建立,不仅仅需要各方面的能力,还得是自己有能力来做判断。比如第4点,如果技术不够,认清不了现实,那肯定是很难制定出来了。

还有最后一条,一个项目的完成,肯定是一个团队努力的结果。所以,沟通是最最重要的,良好的沟通胜过很多无用功。当然啦,沟通也是有技巧的,怎么做,还得从实际情况实际出发来说,这里小编暂时也没有给出太多的意见来了那就。

Tip 一个技术技巧

Java的技术栈,到上一次为止,先结束了。今天和下次,我将给大家分享下Android的存储优化相关。这是第一篇。

“将特定结构的数据转化为另一种能被记录和还原的格式”

数据存储六个关键要素:正确性、时间开销、空间开销、安全、开发成本和兼容性。

我们今天主要来讲讲Android常用的序列化方法如何进行选择。

对象的序列化
  1. Serializable

    Serializable的注意事项

  1. Parcelable
    核心作用就是为了解决Android中大量跨进程通信的性能问题。

Parcel序列化和Java的Serializable序列化差别还是比较大的,Parcelable只会在内存中进行序列化操作,并不会将数据存储到磁盘里。

**Parcelable的注意事项**
  1. Serial

事实上,关于序列化基本每个大公司都会自己自研的一套方案,我在专栏里推荐Twitter开源的高性能序列化方案Serial。

从数据上来看,Serial在序列化与反序列化耗时,以及落地的文件大小都有很大的优势

从实现原理看,Serial就像是吧Parcelable和Serializable的优点集合在一起的方案

数据的序列化
  1. JSON

  2. Protocol Buffers
    如果应用的数据量非常大,又或者对性能有更高的要求,此时Protocol Buffers是一个非常好的选择

存储监控
  1. 性能监控
    六大要素,更关注正确性、时间开销、空间开销

  2. ROM监控

Share 一篇有观点和思考的技术文章

这周还是继续在设计模式的世界里前行中。

公众号地址:
设计模式之工厂模式(二)

爱生活,爱学习,爱感悟,爱挨踢
640?wx_fmt=jpeg


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小跃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值