0
点赞
收藏
分享

微信扫一扫

ARTS-第-21-期


ARTS-第-21-期_数组

阅读本文大概需要 8 分钟。

每周完成一个 ARTS


LeetCode 152. Maximum Product Subarray。

Review 分享 《关于”我没有足够的时间”》一篇英文文章。

Tip 分享Qt/C++ 添加资源文件的一些技巧 。

Share 分享下遇到负面情绪如何更好调整自己。

PS:由于公众号不支持添加外链,所以大家遇到有链接的地方滑到文章最下面点击阅读原文就可以访问了哈,如果觉得文章不错,欢迎分享给周围的朋友们哈

ARTS-第-21-期_数组_02

1.Algorithm

152. Maximum Product Subarray 链接 难度:[Medium]

【题意】

Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.

Example 1:

Input: [2,3,-2,4]

Output: 6

Explanation: [2,3] has the largest product 6.

Example 2:

Input: [-2,0,-1]

Output: 0

Explanation: The result cannot be 2, because [-2,-1] is not a subarray.

【思路】

这道题给定我们一个数组,让我们求最大连续子数组的积。

我们可以定义两个数组 maxEnd 和 minEnd ,分别表示:

以当前元素 nums[i] 结尾的前 i 个数里面最大的连续子数组的积。

以当前元素 nums[i] 结尾的前 i 个数里面最小的连续子数组的积。

这样我们一遍更新的时候就可以比较 maxEnd 和 minEnd 的值,为什么这样就可以呢?

对于 i 位置的元素,假设我们求得了 i 之前的最大连续子数组的积 maxEnd[i-1],判断是否要将 i 位置的元素也加入进来,我们必须判断一下 maxEnd[i-1]*nums[i] 和 nums[i] 哪个谁大,如果连乘之后比当前的数还小,那就肯定不能连乘当前这个数了。

这样我们就可以在 O(n)时间复杂度里解决这个问题了。

【解法一】(C++)

/*
Author: https://github.com/rongweihe
Time: 2019-03-10
*/
// Time complexity : O(n).
// Space complexity : O(n).
// if example is [2,3,-2,4] then [maxEnd minEnd] = [6,3] [-2,-12] [4,-48]
class Solution {
public:
int maxProduct(vector<int>& nums) {
int n = nums.size();
if( n<=0 ) return 0;
int maxV=nums[0],minV=nums[0];
vector<int> maxEnd(n,nums[0]),minEnd(n,nums[0]);
for(int i=1; i<n; ++i){
maxEnd[i]=max(max(maxEnd[i-1]*nums[i],minEnd[i-1]*nums[i]),nums[i]);
minEnd[i]=min(min(maxEnd[i-1]*nums[i],minEnd[i-1]*nums[i]),nums[i]);
}
for(int i=0; i<n; ++i){
maxV = max(maxEnd[i],maxV);
}
return maxV;
}
};

2.Review

《关于”我没有足够的时间”》

今天阅读了一篇时间管理的英文文章,对我很有启发,分享给大家。

作者一开头就提出自己的观点

大多数人都高估了他们一天能做的事情,但低估了他们一年能做的事情。

接下来作者在这篇文章中提出了三个关键概念。 第一个是那些认为他们没有足够时间的人,以及为什么这种想法往往是错的。 第二是强调坚持工作的好处,以及为什么成功人士最擅长风险缓解,而不是最大化风险。 最后第三个作者认为我们可以在思考方法中做出的一些改进 。

1 . 为什么你觉得你没有足够的时间

作者认为,尽管世界和劳动力发生了巨大变化,但“工作时间”和“我的(可支配)时间”这一概念今天依然存在。 对“我的(可支配)时间”的看法提出质疑。

对于许多人来说,漫长的一天工作意味着他们有权享受这个“我的(可支配)时间”,(这里我可以理解为自己可以自由支配的时间),并且大多数人都倾向于尽可能的将“我的时间”与“工作时间”区别开来。

对于很多人来说, 如果某一时刻或者某一天你觉得需要休息了,那你就休息吧。 但是如果你的目标是有一天成为一名伟大的企业家,那么“我的时间”的很大一部分应该投入到实现你的目标,如果你不去一步步行动,目标也永远是目标而已。

“我的时间”不应该仅仅是非疲劳的活动,而是任何有助于个人进入他们希望进入的未来状态的事物。每天约有 16 个小时分配到工作和睡眠当中去,每个人大约有8个小时分配到“我的时间”,如果使用得当,每年你可以利用将近 3000 多个小时去实现很多你的目标和梦想。

作者认为还有一种误解,认为大部分人为了建立可持续发展的业务,你需要花费大量的时间来实现这一目标。 虽然确实需要付出很多努力,但最重要的是随着时间的推移不断努力。 大多数人都低估了这种复利的概念。

就比如下图所展示的那样。

ARTS-第-21-期_数组_03

Take a look at the following equations:

1.01³⁶⁵ = 37.8

1.10³⁰ = 17.5

关于后文,作者认为从事一份工作的三个好处

1. Getting paid to learn 获得报酬性的学习

2. Keeping ideas fresh and the mind clear 保持想法新鲜,头脑清晰

3. Pilot a lot and then bet it all  在风险承担中一步步变得有经验

后面作者还写了很多,这里限于篇幅就不展开解读了,感兴趣的可以点阅读原文访问。

3. Tip

使用 qrc 资源文件,也就是在 Qt 的工程中添加资源文件,就是添加的资源文件(如 qrc.cpp)会直接被存放到静态数组中,从而一直占用内存,使内存的利用率不高。有的时候如果资源过大,可能编译都无法通过,报错:

cc1plus.exe: out of memory allocating 1073745919 bytes

提供两种巧妙的解决办法:

1, 在工程 PRO文件中,添加:CONFIG += resources_big

2, 为每一个资源文件单独添加一个 qrc 文件,然后添加完重新清理编译项目。

4. Share

我们绝大部分人都是普通人,并且都会被身边的一些琐事所干扰,有时候回心情不好,心态低落,什么事情都不想干,这些情绪我相信大家都有过,想起我在当初学机器学习的时候,遇到过很多的困难,很难理解其中的一些概念,脑中总是转不过弯来,也是相当的痛苦,甚至觉得自己不适合干这行。遇到这种情况我们应该及时调整自己,让自己走出负面的情绪。

分享两个自己习惯的方法,这里希望能给大家一些帮助和参考。

及时沟通、互相交流

在生活、学习、工作中,总会有心情不好的时候、情绪很低落的时候,心情不好的时候,约几个关系好的朋友、聊一聊,吃吃饭,把自己内心的一些想法和他们做沟通、彼此互相交流,把自己的一些想法给他们说说。有些事情,不吐不快,憋在心里很难受,通过交流,自己能得到一定程度的释然,心情就能慢慢的变好了。

在心情不好,情绪低落的时候,减少做比较复杂的事情的频率,做一些简单、容易给自己信心的事情;在这个时候,其实做事情很没有效率的,要么出去散散心,要么睡一觉,说到本质上:还是受一些事情的影响,自己想不通,自己难为自己。

让自己忙起来

遇到一些困难的事情,要给自己信心,慢慢想通;经历的事情多了,内心慢慢都会强大的,在平时做项目过程中遇到问题、遇到自己心情不好的事情,晚上跑跑步,大汗淋漓,很享受那种感觉。回宿舍洗完澡,早早休息,好好睡上一觉,第二天尽量不去想它,让自己忙起来,慢慢找方法,很多时候,就是你太闲了,整天东想西想,整的自己心情不好,多做事情,让自己不要太闲,就没精力顾及那些琐碎的事情了。

总结:在生活中,学习中,我们要学会时刻调整、激励自己,让自己忙起来,让自己不要有闲暇的那些功夫,以更好的精力和状态面对新的一天。

祝大家周末愉快~


ARTS-第-21-期_数组_04

举报

相关推荐

0 条评论