善始善终-写在中国数码最后的日子里

作者回顾了在公司两年的成长历程,从一名应届毕业生转变为较为合格的开发人员,并总结了工作中的不足之处,同时也为自己设定了未来职业发展的目标。

  天下没有不散的筵席,马上就要离开中国数码了,在这最后的几周里要时刻提醒自己善始善终,尽量把自己的工作交接清楚,尽量将项目组因为自己的离开而造成的损失降至最低点。

  时间过得真快,转眼已经毕业快两年了,2007年6月6日自己以一名应届生的身份加入了中国数码这个大家庭,成为了多媒体部门的一名开发人员。在这两年中,在公司同事的帮助下,自己从一名应届毕业生成长为了一名自认为还比较合格的开发人员,这其中有自己得努力更离不开同事们的帮忙。这两年里,感谢项目组对我的信任,能够让我有机会负责项目中一个模块的设计与开发,在这一过程中,自己学到了很多关于软件工程及软件开发流程方面的知识,在系统分析与设计方面也有了很大提高,从而使自己对设计模式方面有了更深入的理解。

  回首这两年,在工作中存在的不足有以下几点:

  1.和部门其它项目组的成员交流的比较少,除了自己项目组中的成员外,其它项目组中的同事认识的就那么几个,这个以后要多多努力

  2.同事中除了工作方面的交流外,生活上及业余活动方面和同事交流的比较少,这个有自己的原因,自己认为公司方面也有一定责任,在这里的两年,对公司的企业文化一直不太认同,公司几乎没有给员工提供任何的除了工作上的交流机会。公司可能也有自己的难处,今后要自己创造机会多和同事之间交流。

  3.在项目组中有几个专门做硬件的同事,但是自己这两年来对硬件方面的知识还是停留在原来的基础上,而没有在工作中多向同事学习硬件方面的知识

  在即将踏上新的工作岗位时,自己也对自己提一些要求和目标:

  1. 尽量结合自己的专业方向,努力出色完成公司的各项任务

  2. 在一个外资企业里希望能将自己的英语水平得到一个提高,尤其是口语方面

  3. 多向公司其它同事虚心请教,争取发现每一位同事身上优点,并将他人优点转化为自己的优点

 

 

这是一个经典的**区间调度问题(Interval Scheduling Problem)**,目标是选择**最多互不重叠的区间**(比赛),使得能参加的比赛数量最大化。 这个问题有一个非常高效的贪心解法:**按结束时间升序排序,然后尽可能早地结束当前比赛,为后续比赛腾出空间。** --- ### ✅ 问题分析: - 每个比赛有开始时间 `s` 和结束时间 `e` - yyy 只能参加一个完整比赛,不能中断 - 不能同时参加两个比赛(时间段不能重叠) - 目标:选出最多的互不重叠的比赛 > **贪心策略**:优先选择**结束时间最早的**比赛。这样可以给后面留出更多时间。 --- ### ✅ C++ 实现代码: ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; // 定义比赛结构体 struct Contest { int start; int end; // 构造函数 Contest(int s, int e) : start(s), end(e) {} }; // 自定义比较函数:按照结束时间升序排列 bool compare(const Contest& a, const Contest& b) { return a.end < b.end; } // 主函数:计算最多可参加的比赛数目 int maxContests(vector<Contest>& contests) { // 按照结束时间排序 sort(contests.begin(), contests.end(), compare); int count = 0; // 已选比赛数量 int last_end_time = -1; // 上一个被选中的比赛的结束时间 for (const auto& contest : contests) { // 如果当前比赛的开始时间 >= 上一个选中比赛的结束时间 if (contest.start >= last_end_time) { count++; last_end_time = contest.end; // 更新最后结束时间 } } return count; } int main() { int n; cout << "请输入比赛总数 n: "; cin >> n; vector<Contest> contests; cout << "请依次输入每个比赛的开始时间和结束时间:" << endl; for (int i = 0; i < n; ++i) { int s, e; cin >> s >> e; contests.emplace_back(s, e); } int result = maxContests(contests); cout << "最多可以参加 " << result << " 个比赛" << endl; return 0; } ``` --- ### 🔍 示例运行: **输入:** ``` 请输入比赛总数 n: 5 请依次输入每个比赛的开始时间和结束时间: 1 3 2 4 3 5 5 7 6 8 ``` **处理过程:** | 比赛 | 开始 | 结束 | 是否可选 | |------|------|------|----------| | 1 | 1 | 3 | 是(第一个)→ last_end=3 | | 2 | 2 | 4 | 否(2 < 3)| | 3 | 3 | 5 | 是(3 ≥ 3)→ last_end=5 | | 4 | 5 | 7 | 是(5 ≥ 5)→ last_end=7 | | 5 | 6 | 8 | 否(6 < 7)| ✅ 最多可选:**3 个比赛**([1,3], [3,5], [5,7]) **输出:** ``` 最多可以参加 3 个比赛 ``` --- ### ⏱️ 复杂度分析: - 时间复杂度:O(n log n),主要是排序开销 - 空间复杂度:O(n) --- ### 💡 关键点说明: - 为什么按**结束时间排序**? 因为我们希望尽快“释放”时间资源,让后面的活动更容易安排。 - 不能按开始时间或持续时间排序!这是常见误区。 - 这种方法也被称为 **Activity Selection Problem** 的标准解法。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值