目录导航 [TOC]
[1749] Maximum Absolute Sum of Any Subarray
Medium array Dynamic Programming
You are given an integer array nums. The absolute sum of a subarray [numsl, numsl+1, ..., numsr-1, numsr] is abs(numsl + numsl+1 + ... + numsr-1 + numsr).
Return the maximum absolute sum of any (possibly empty) subarray of nums.
Note that abs(x) is defined as follows:
If x is a negative integer, then abs(x) = -x. If x is a non-negative integer, then abs(x) = x.
Example1:
Input: nums = [1,-3,2,3,-4]
Output: 5
Explanation: The subarray [2,3] has absolute sum = abs(2+3) = abs(5) = 5.Example2:
Input: nums = [2,-5,1,-4,3,-2]
Output: 8
Explanation: The subarray [-5,1,-4] has absolute sum = abs(-5+1-4) = abs(-8) = 8.Constraints:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
解答 最大连续子序列,非常经典的问题,是53. Maximum Subarray变形题目,主要采用暴力破解和基于Kadane's algorithm的解法 wikipedia上关于该类型提的说明:Maximum subarray problem
但是算法的执行时间不一定比第一种高,因为在for循环中多了很多次的abs方法执行
func solution1(nums []int) int {
bestMaxSum, curMaxSum := 0, 0
for _, val := range nums {
curMaxSum = maxVal(curMaxSum+val, val)
bestMaxSum = maxVal(bestMaxSum, curMaxSum)
}
bestMinSum, curMinSum := 0, 0
for _, val := range nums {
curMinSum = minVal(curMinSum+val, val)
bestMinSum = minVal(bestMinSum, curMinSum)
}
if bestMinSum < 0 {
if abs(bestMinSum) > bestMaxSum {
return abs(bestMinSum)
}
}
return bestMaxSum
}
func abs(val int) int {
if val < 0 {
return -val
}
return val
}
func maxVal(val1, val2 int) int {
if val1 > val2 {
return val1
}
return val2
}
func minVal(val1, val2 int) int {
if val1 < val2 {
return val1
}
return val2
}
func solution2(nums []int) int {
result, curMaxSum, curMinSum := 0, 0, 0
for _, val := range nums {
curMaxSum = maxVal(curMaxSum+val, val)
curMinSum = minVal(curMinSum+val, val)
result = maxVal(result, maxVal(abs(curMaxSum), abs(curMinSum)))
}
return result
}
以下几篇有关Fluentd入门的文章,ELK是非常传统的日志收集方式,而在演进的过程中往往会引入Fluentd作为数据的采集端,演变成EFK的架构模式。(再加上轻量级的Grafana+Loki的方式,几种主流的日志方案都算齐了)
- What is Fluentd?
- Why Use Fluentd?
- Unified Logging Layer: Turning Data into Action
- Frequently Asked Questions
- Fluentd vs Logstash: A Comparison of Log Collectors
- Kubernetes Logging: Comparing Fluentd vs. Logstash
- 5 ELK Stack Pros and Cons
摘录几个比较重要的点:
- Fluente is an open source data collector, which let you unify the data collection and comsumption for a better use and understanding of data.
- the key features:
- Unified Logging with JSON
- Pluggable Architecture
- Minimum Resources Required
- Built-in Reliability
Markdown生成目录的技巧,之前一直会Markdown写一些文档,但是自己很少关注Markdown生成文档的效果是否有目录结构。
在Markdown中,自动生成目录非常简单,只需要在恰当的位置上添加[TOC]符合(包括两个大括号),凡是以 # 定义的标题都会编排到目录中
将[列表]和[页内超级链接]相结合
- 标题一
- [标题1-1](#二级标题 1-1)
参考资料:
今天主要分享郭东白老师的架构课中的架构师的生成法则三:架构师永远需要在有限资源下最大化商业价值。架构师的可用资源,包括商业成本、研发成本、时间成本、迁移成本等等。
- 《架构师如何找到自己的商业模式?》
- 为自己所在的企业创造出可度量的商业价值,这是我们获得有质量的长期收入的重要前提。
- 为公司赚钱的三个路径:(1).实现一个商业模式,(2).提升一个商业模式的效率 (3).加速一个商业模式的收敛速度
- 理解一个企业或者团队的商业模式:理解自己所处的工作环境
- 每个人都要有自己的商业模式:为公司、部门或团队提供可量化的增量价值
- 架构师如何创造自己的增量价值:
- 架构师的产出不完全靠自己,而是靠撬动一群人来完成架构目标
- 一个架构师想要创造长期的商业价值,就必须同时满足三个条件:
- 确保最终架构方案的可行性
- 确保参与方达成一个合理的实施路径,最终能够完成实施
- 确保设计方案可以最大化解决方案的结构性
- 做架构和做业务一样,都不能靠饱和攻击取胜,而是靠对阶段性精确目标的最大化投入来取得进步。
- 《架构师如何在一定时间内最大化自己的增量价值?》
- 如何寻找扩大收入的机会?-》在小数据里看大机会,在大数据里看小机会
- 靠数据来打磨用户体验。也就是通过数据分析找到机会点,然后通过产品和技术的改进,不断提升转化减少损失。
- 看到了别人忽略的小痛点,或者在别人不去排查的小异常上执着探索,才最终跨越了现实的障碍。
- 在别人容易忽视的痛点和异常点上,深度挖掘可能大规模复制的机会,不失为扩大收入的好方法。
- 如何寻找减少成本的机会?
- 在一个企业中,追求完美必须以成本可控为前提。
- 如何寻找扩大收入的机会?-》在小数据里看大机会,在大数据里看小机会
其实不管作为架构师或者个人,都要考虑自己的价值,作为企业的一员,如果你不能为公司创造价值,不能为部门,不能为团队创建价值,那你就是一个多余的人,很可能处于边缘或者即将被淘汰的角色。最近一年多在外面进行项目实施的架构,但是整个项目的定制化开发成本太高,人力成本,沟通成本等都非常巨大,而如何快速的演进,打磨成一款标准化的,可快速实施落地的产品是非常值得研究的事情,当然这其中也会有很多阻力,如何平衡各种利益的关联方,能否标准化的架构理念能推行,必将是一项艰巨的任务。

