Algorithm

119. 杨辉三角 II
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。

思路:

总的来说就是利用杨辉三角形后一行与前一行的关系。
更新过程为:从倒数第二个元素开始往前更新 它等于原来这个位置的数 + 前一个位置的数的行[i] = 行[i] + 行[i-1]

class Solution {public:vector<int> getRow(int rowIndex) {vector<int> kRows(rowIndex+1);//第K行的vector大小为 rowIndex+1for(int i = 0; i <= rowIndex; i++)//利用前一行求后一行,第K行要循环K遍{kRows[i] = 1;//行末尾为1for(int j = i; j > 1; j--)//每一行的更新过程{kRows[j-1] = kRows[j-2] + kRows[j-1];}}return kRows;   }
};

亦或者是:

class Solution {public:vector<int> getRow(int rowIndex) {vector<int> kRows(rowIndex+1);for(int i = 0; i <= rowIndex; i++){kRows[i] = 1;for(int j = i-1; j >= 1; j--){// 处理每一行的元素,从最后一个元素(值为1)前面的元素开始,从后往前处理// 第j个元素的值等于:前一行第j-1个元素的值 + 前一行第j个元素的值kRows[j] = kRows[j-1] + kRows[j];}}return kRows;}
};

Review

史上最详细的AVOD讲解

Tips

Git 学习
git add -u:将文件的修改、文件的删除,添加到暂存区。
git add .:将文件的修改,文件的新建,添加到暂存区。
git add -A:将文件的修改,文件的删除,文件的新建,添加到暂存区。
工作中一般是用到 git add . 或者 git add -A

git add -A相对于git add -u命令的优点 : 可以提交所有被删除、被替换、被修改和新增的文件到数据暂存区,而git add -u 只能操作跟踪过的文件
git add -A 等同于git add -all

git reset --hard 清除暂存

git mv 可以在git端修改文件名
git reset --hard 可以把工作区和暂存区的文件,都回滚了

• git log --all 查看所有分支的历史
• git log --all --graph 查看图形化的 log 地址
• git log --oneline 查看单行的简洁历史。
• git log --oneline -n4 查看最近的四条简洁历史。
• git log --oneline --all -n4 --graph 查看所有分支最近 4 条单行的图形化历史。
• git help --web log 跳转到git log 的帮助文档网页

//cat命令主要用来查看文件内容,创建文件,文件合并,追加文件内容等功能。
cat HEAD 查看HEAD文件的内容
git cat-file 命令 显示版本库对象的内容、类型及大小信息。
git cat-file -t b44dd71d62a5a8ed3 显示版本库对象的类型
git cat-file -s b44dd71d62a5a8ed3 显示版本库对象的大小
git cat-file -p b44dd71d62a5a8ed3 显示版本库对象的内容

HEAD:指向当前的工作路径
config:存放本地仓库(local)相关的配置信息。
refs/heads:存放分支
refs/tags:存放tag,又叫里程牌 (当这次commit是具有里程碑意义的 比如项目1.0的时候 就可以打tag)
objects:存放对象 .git/objects/ 文件夹中的子文件夹都是以哈希值的前两位字符命名 每个object由40位字符组成,前两位字符用来当文件夹,后38位做文件。

.git 文件目录

• COMMIT_EDITMSG
• config 当前 git 的配置文件
• description (仓库的描述信息文件)
• HEAD (指向当前所在的分支),例如当前在 develop 分支,实际指向地址是 refs/heads/develop
• hooks [文件夹]
• index
• info [文件夹]
• logs [文件夹]
• objects [文件夹] (存放所有的 git 对象,对象哈希值前 2 位作为文件夹名称,后 38 位作为对象文件名, 可通过 git cat-file -p 命令,拼接文件夹名称+文件名查看)
• ORIG_HEAD
• refs [文件夹]
• heads (存放当前项目的所有分支)
• tags (存放的当前项目的所有标签,又叫做里程碑)

现在我们应该明白git底层的运行流程了,当我们添加或者修改了文件并且add到Stage Area之后,首先会根据文件内容创建不同的blob,当进行提交之后马上创建一个tree组件把需要的blob组件添加进去,之后再封装到一个commit组件中完成本次提交。在将来进行reset的时候可以直接使用git reset --hard xxxxx可以恢复到某个特定的版本,在reset之后,git会根据这个commit组件的id快速的找到tree组件,然后根据tree找到blob组件,之后对仓库进行还原,整个过程都是以hash和二进制进行操作,所以git执行效率非常之高。

commit -a 老师的用词还是很精准的,老师说如果你觉得暂存区你是不需要的,那你就这样用,注意哦,是你不需要,而不是这个命令之后,工作区的内容不会进入暂存区,还是会进入的,只是加入之后立即会生成一个commit,不给你操作暂存区的机会~

HEAD的使用,以及PARENT符号^和~。可以这么理解
1 一个节点,可以包含多个子节点(checkout 出多个分支)
2 一个节点可以有多个父节点(多个分支合并)
3 ^ 和 ~ 都是父节点,区别是跟随数字时候,^2 是第二个父节点,而~2是父节点的父节点
4 ^ 和 ~ 可以组合使用,例如 HEAD~2^2

DMA来源与原理

过去几年里,整个计算机产业界,都在尝试不停地提升 I/O 设备的速度。把 HDD 硬盘换成 SSD 硬盘,我们仍然觉得不够快;用 PCI Express 接口的 SSD 硬盘替代 SATA 接口的 SSD 硬盘,我们还是觉得不够快,所以,现在就有了傲腾(Optane)这样的技术。但是,无论 I/O 速度如何提升,比起 CPU,总还是太慢。SSD 硬盘的 IOPS 可以到 2 万、4 万,但是我们 CPU 的主频有 2GHz 以上,也就意味着每秒会有 20 亿次的操作。如果我们对于 I/O 的操作,都是由 CPU 发出对应的指令,然后等待 I/O 设备完成操作之后返回,那 CPU 有大量的时间其实都是在等待 I/O 设备完成操作。但是,这个 CPU 的等待,在很多时候,其实并没有太多的实际意义。我们对于 I/O 设备的大量操作,其实都只是把内存里面的数据,传输到 I/O 设备而已。在这种情况下,其实 CPU 只是在傻等而已。特别是当传输的数据量比较大的时候,比如进行大文件复制,如果所有数据都要经过 CPU,实在是有点儿太浪费时间了。

因此,计算机工程师们,就发明了 DMA 技术,也就是直接内存访问(Direct Memory Access)技术,来减少 CPU 等待的时间。

理解 DMA,一个协处理器其实 DMA 技术很容易理解,本质上,DMA 技术就是我们在主板上放一块独立的芯片。在进行内存和 I/O 设备的数据传输的时候,我们不再通过 CPU 来控制数据传输,而直接通过 DMA 控制器(DMA Controller,简称 DMAC)。这块芯片,我们可以认为它其实就是一个协处理器(Co-Processor)。DMAC 最有价值的地方体现在,当我们要传输的数据特别大、速度特别快,或者传输的数据特别小、速度特别慢的时候。

比如说,我们用千兆网卡或者硬盘传输大量数据的时候,如果都用 CPU 来搬运的话,肯定忙不过来,所以可以选择 DMAC。而当数据传输很慢的时候,DMAC 可以等数据到齐了,再发送信号,给到 CPU 去处理,而不是让 CPU 在那里忙等待。好了,现在你应该明白 DMAC 的价值,知道了它适合用在什么情况下。那我们现在回过头来看。我们上面说,DMAC 是一块“协处理器芯片”,这是为什么呢?注意,这里面的“协”字。DMAC 是在“协助”CPU,完成对应的数据传输工作。在 DMAC 控制数据传输的过程中,我们还是需要 CPU 的。

除此之外,DMAC 其实也是一个特殊的 I/O 设备,它和 CPU 以及其他 I/O 设备一样,通过连接到总线来进行实际的数据传输。总线上的设备呢,其实有两种类型。一种我们称之为主设备(Master),另外一种,我们称之为从设备(Slave)。想要主动发起数据传输,必须要是一个主设备才可以,CPU 就是主设备。而我们从设备(比如硬盘)只能接受数据传输。所以,如果通过 CPU 来传输数据,要么是 CPU 从 I/O 设备读数据,要么是 CPU 向 I/O 设备写数据。这个时候你可能要问了,那我们的 I/O 设备不能向主设备发起请求么?可以是可以,不过这个发送的不是数据内容,而是控制信号。I/O 设备可以告诉 CPU,我这里有数据要传输给你,但是实际数据是 CPU 拉走的,而不是 I/O 设备推给 CPU 的。

不过,DMAC 就很有意思了,它既是一个主设备,又是一个从设备。对于 CPU 来说,它是一个从设备;对于硬盘这样的 IO 设备来说呢,它又变成了一个主设备。那使用 DMAC 进行数据传输的过程究竟是什么样的呢?下面我们来具体看看。

  1. 首先,CPU 还是作为一个主设备,向 DMAC 设备发起请求。这个请求,其实就是在 DMAC 里面修改配置寄存器。
  2. CPU 修改 DMAC 的配置的时候,会告诉 DMAC 这样几个信息:

首先是源地址的初始值以及传输时候的地址增减方式。所谓源地址,就是数据要从哪里传输过来。如果我们要从内存里面写入数据到硬盘上,那么就是要读取的数据在内存里面的地址。如果是从硬盘读取数据到内存里,那就是硬盘的 I/O 接口的地址。我们讲过总线的时候说过,I/O 的地址可以是一个内存地址,也可以是一个端口地址。而地址的增减方式就是说,数据是从大的地址向小的地址传输,还是从小的地址往大的地址传输。

其次是目标地址初始值和传输时候的地址增减方式。目标地址自然就是和源地址对应的设备,也就是我们数据传输的目的地。

第三个自然是要传输的数据长度,也就是我们一共要传输多少数据。

  1. 设置完这些信息之后,DMAC 就会变成一个空闲的状态(Idle)。
  2. 如果我们要从硬盘上往内存里面加载数据,这个时候,硬盘就会向 DMAC 发起一个数据传输请求。这个请求并不是通过总线,而是通过一个额外的连线。
  3. 然后,我们的 DMAC 需要再通过一个额外的连线响应这个申请。
  4. 于是,DMAC 这个芯片,就向硬盘的接口发起要总线读的传输请求。数据就从硬盘里面,读到了 DMAC 的控制器里面。
  5. 然后,DMAC 再向我们的内存发起总线写的数据传输请求,把数据写入到内存里面。
  6. DMAC 会反复进行上面第 6、7 步的操作,直到 DMAC 的寄存器里面设置的数据长度传输完成。
  7. 数据传输完成之后,DMAC 重新回到第 3 步的空闲状态。所以,整个数据传输的过程中,我们不是通过 CPU 来搬运数据,而是由 DMAC 这个芯片来搬运数据。但是 CPU 在这个过程中也是必不可少的。因为传输什么数据,从哪里传输到哪里,其实还是由 CPU 来设置的。这也是为什么,DMAC 被叫作“协处理器”。


最早,计算机里是没有 DMAC 的,所有数据都是由 CPU 来搬运的。随着人们对于数据传输的需求越来越多,先是出现了主板上独立的 DMAC 控制器。到了今天,各种 I/O 设备越来越多,数据传输的需求越来越复杂,使用的场景各不相同。加之显示器、网卡、硬盘对于数据传输的需求都不一样,所以各个设备里面都有自己的 DMAC 芯片了。

Share

海天作为调味品行业的龙头老大,也只占了16%的市场份额,竞争激烈,但是行业还是处于可以继续发展的成熟期,海天的财报看起来还不错。

看下海天的企业护城河
主要在以下几个方面:
(1)强大的品牌美誉度(海天酱油美味鲜,晒足180天)
(2)不断保持信息化优势(集合行业特性的生产智造,效率库存提升改进),直接导致了另外两个优势(1)规模优势+成本优势(同行业内最高的净利率)(2)全产业链优势(占用上下游资金,等同于无息贷款)
(3)创新的销售模式(下沉100%覆盖,特定制度精细化管理考核,持续广告宣传、大众心智占领)

招股书说明,销售都为买断式销售,不退回。
(4)特有的企业文化(守拙择善,务实创新)
从过往的发展来看,坚持如一,从本业出发扩展。
(5)优秀的管理层
董事长有从基层到董事长的经历,其他管理人员大部分都是来自原酱油厂旧部。

再来看供应链的优势:
我们现在简单提炼一下,首选的指标就是净现金周转天数的变化,净现金周转天数=存货周转天数 + 应收账款周转天数 + 预付账款周转天数 - 应付账款周转天数 - 预收账款周转天数。
一般的我们认为这个数值越小越好,如果出现负数,则表明其在上下游产业链当中有强势地位。
从整个数据走势图,可以看出,海天味业在上下游的地位是越来越强势,从财报上,我们也可以得知公司无长期借款,流动负债主要来源于对上游供货商和下游经销商的占款—— 对上游供应商先货后款,对下游经销商要求先款后货。
2017年公司总负债45.72亿元, 其中应付账款(对上游供应商占款)占比12.14%,预收款项(对下游经销商占款) 占比58.60%。
那么,需要进一步分析,其上下游地位强势的来源。
我们重点分析其下游渠道的分布和占有率情况。主要分为:公司本身销售渠道管理和产品渠道的市场占有率。
公司本身的渠道管理:海天味业采取直控终端、深度分销的渠道模式。公司在全国划分了6个大区,采取经销商制;厂商关系上实行垂直管理与厂商“1+1”帮扶。
由于餐饮渠道购买较为分散,完全由一批经销商开发不太现实,需要开发二批商(分销商),厂商合作的模式有助于海天帮助一批经销商开拓二批经 销商,实现更好的渠道开拓与客情维护。
厂商协作的深度分销机制是当前中国调味 品市场购买场景重餐饮、重流通背景下的必然选择,而自1994年以来不断积累的渠道织网也为海天构建了在餐饮渠道深度分销的强大护城河,这样的护城河需要投入 大量人员、资金和时间才能建立。
2017年海天销售人员1804人,远高于竞争对手。2017年海天促销和广告费用8.48亿元,第二名美味鲜仅0.56亿元,海天每年渠道费用投放为美味鲜的15倍。
海天味业对渠道的精细化管理水平高。海天在同一区域实行双驾马车制度,配备两名以上经销商,竞争淘汰。对于每一名经销商公司要求专人专车专项资金,保证海天的渠道运作。
海天对每一环节的渠道费用掌握精细,指导经销商运作市场, 可确保高水平费用投放效率,保证每个环节经销商利润的同时,最大化公司的费用投放效率。

总结:海天味业是唯一实现全国渠道覆盖的公司,高覆盖率筑就海天家庭渠道壁垒。正因为海天味业内部建立了高效和全覆盖的经销商队伍,使其在调味品渠道中的餐饮渠道和家庭渠道都稳居行业第一,又因为其广告投入最大,品牌占据了消费者心智,从而形成了公司的正向循环,可以不断的挤压上下游资金发展自己,形成了强势的供应链优势。

ARTS-26(leetcode-119. 杨辉三角 II,AVOD最详细过程,Git用法,DMA原理,海天味业的企业估值(1))相关推荐

  1. leetcode 119. 杨辉三角 II

    题目 思路 根据上一题题解:leetcode 118. 杨辉三角 本题直接取第 i 行返回就可以了 题解 1.续上一题(118题)的解法,上一题的代码直接拿来用了 import java.util.A ...

  2. python杨辉三角_yiduobo的每日leetcode 118.杨辉三角 amp;amp; 119.杨辉三角II

    祖传的手艺不想丢了,所以按顺序写一个leetcode的题解.计划每日两题,争取不卡题吧. 118.杨辉三角https://leetcode-cn.com/problems/pascals-triang ...

  3. leetcode 刷题 119. 杨辉三角II

    给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] 解答: class Soluti ...

  4. 力扣119杨辉三角 II:代码实现 + 方法总结(数学规律法 记忆法/备忘录)

    文章目录 第一部分:题目 第二部分:解法①-数学规律法 2.1 规律分析 2.2 代码实现 2.3 需要思考 第三部分:解法②-记忆法(备忘录) 第四部分:对比总结 第一部分:题目

  5. 118_杨辉三角与杨辉三角II

    118.杨辉三角 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行. 在「杨辉三角」中,每个数是它左上方和右上方的数的和. 示例 1: 输入: numRows = 5 输出: ...

  6. 【每日一算法】杨辉三角 II

    每日一算法-杨辉三角 II 题目 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] ...

  7. 杨辉三角 118.杨辉三角 119.杨辉三角Ⅱ(数学解法)

    118.杨辉三角 public List<List<Integer>> generate(int numRows) {if (numRows == 0) return new ...

  8. LeetCode 第119题 杨辉三角II

    给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 通项公式 : n = n * (rowIndex - i) / (i + 1); ...

  9. (进阶)LeetCode(119)——杨辉三角 II(JavaScript)

    给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例1: 输入: 3 输出: [1,3,3,1] 进阶: 你可以优化你的算法到 ...

  10. LeetCode简单题之杨辉三角 II

    题目 给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行. 在「杨辉三角」中,每个数是它左上方和右上方的数的和. 示例 1: 输入: rowIndex = 3 输出: [1 ...

最新文章

  1. 【怎样写代码】偷窥高手 -- 反射技术(六):深入窥视DLL内部
  2. 四轴飞行器实践教程1.1.2飞行器的发展
  3. 苹果M1芯片升级果然很炸场:性能暴涨功耗速降!但最香新品竟是无降噪AirPods 3...
  4. linux 系统日志路径作用 简介
  5. 一份平民化的应用性能优化检查列表(完整篇)--转
  6. phpcmsV9 会员升级 - 配置篇
  7. 已编辑好的mysql_安装好的mysql改变数据库文件位置
  8. GM8284DD(GM8284DR)LVDS转TTL芯片功能汇总及设计注意事项
  9. 通过JS改变框架的src
  10. java web整合开发完全自学手册pdf_《JavaScript完全自学手册》PDF 下载
  11. Mac 软件汉化教程(一)
  12. RIP、OSPF、ISIS协议的区别
  13. 总结:Homography和图像拼接
  14. 怎么科学解读闪电鞭?年轻人我劝你耗子尾汁,好好反思
  15. Google Chrome显示粉红色屏幕
  16. 笔记本使用wifi链接外网,同时有线链接内网详细设置,最后有bat文件,方便随时切换
  17. 计算机专业课考研都有哪些,计算机专业考研的课程有哪些
  18. HUST-多媒体基础PPT目录
  19. 清除flashback日志
  20. 交易日九点到九点半的挂单撤单以及价格的一点心得

热门文章

  1. 密码生成 算法编程题
  2. linux抓本来端口包,Linux抓包
  3. PL/SQL 连接mysql步骤
  4. 【笔记】人工智能 一种现代方法 第1章 绪论
  5. iweboffice之word——自定义菜单的使用
  6. 盘点年度最佳10大顶级绘图软件,满足你99%的图表需求,赶紧收藏
  7. MTK modem编译
  8. oracle normal索引类型,Oracle学习笔记(10)管理索引
  9. 应用窗口置顶工具 DeskPins
  10. ArcGIS教程 - 2 ArcGIS基础知识