<引爆点>感悟

嗯... 这应该是本好书,可惜我看的时间跨度太大,前面的内容很难联想起来了。有机会重读。

第一是个别人物法则:联系员、内行、推销员。

第二是附着力因素,流行物本身应该具备的要素,它应该具备能让人过目不忘,或者至少给人留下深刻印象的附着力。

第三是环境威力法则,发起流行的环境极端重要。

还有一个150法则:当一个组织的规模超过150人时,组织成员之间的沟通就存在问题(对应是小米的荣组儿,也是小团队)。

一个核心思想是:很多时候取决于一些微小的因素,这些微小的因素能够改变世界。并且,变化会是突发的。

六步分离。

经验一:要想发起流行潮,就必须做到把有限的资源集中到关键方面。

经验二:世界并非是我们一厢情愿认为的我们直觉中的世界。

经验三:最重要的因素,具备一个信念---制作变化是可能的,人们能够在一些特定力量的驱使下,骤然改变自己的行为或者观念。


这段代码是用来解决“最少数量的箭引爆气球”这个问题的经典算法实现。下面我会详细介绍它的功能和工作原理: ### 功能概述 给定一系列二维平面上表示气球位置的区间(即每一个气球对应一段水平线段),目标是找到最少的数量的垂直箭能够射爆所有的气球。 ### 代码分析 #### 1. **类及函数声明** ```cpp class Solution { public: int findMinArrowShots(vector<vector<int>>& points); }; ``` - 这里定义了一个名为Solution的类,其中包含公共成员函数findMinArrowShots。 - 此函数接收一个参数`points`,这是一个存储了多个气球区间的二维向量。 #### 2. **排序步骤** ```cpp ranges::sort(points, {}, [](auto& p) { return p[1]; }); // 按照右端点从小到大排序 ``` - 调用了C++20引入的新特性`std::ranges::sort`来对`points`进行排序。 - 排序基于每个气球区间的结束坐标(p[1]),使得数组按照这些坐标的递增次序排列。 #### 3. **初始化计数变量和前驱标记** ```cpp int ans = 0; // 计算所需最小箭矢数目 long long pre = LLONG_MIN; // 初始设置为不可能达到的小值 ``` - `ans`: 初始化为零,用来记录需要多少支箭才能击破全部气球。 - `pre`: 首先设定成非常小的一个数字(`LLONG_MIN`),以便后续比较时可以保证第一次循环一定能满足条件更新它。 #### 4. **遍历并计算最少箭数** ```cpp for (auto& p : points){ if (p[0] > pre){ // 当当前气球开始位置大于上一支箭的位置,则增加箭的数量 ans++; pre = p[1]; // 更新新的箭头放置在当前气球结尾处 } } ``` - 循环检查每个气球是否能被之前的一支箭射中。 - 条件判断:如果当前气球起始位置超过上次射击范围(pre),则需新增一只箭(即`ans++`)并将此新箭设于现气体球末端作为下次参照基准。 #### 5. **返回结果** ```cpp return ans; ``` 最后返回总所需的最少箭数量。 --- ### 示例说明 假设输入如下: ```txt [[10,16],[2,8],[1,6],[7,12]] ``` 经过上述过程处理后得到的结果将是: ```txt 2 ``` 解释:你可以分别从x=6 和 x=11两个地方发射两枚箭即可覆盖所有气球区域。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值