项目管理日常
项目经理每日工作
-
项目目标,计划,计划,再计划
-
总结自己一天的计划完成情况
-
考虑明天应该做的主要工作,二八原则,授权
-
了解每个项目小组的工作进展情况,并进行相应指导
-
提前考虑到实施过程中的缺陷与不足之处,并想出改善的方法与步骤
-
记住每一位项目团队的负责人及团队组长的名字. 干活负责程度
-
每天必须看的 各种数据报表和清单
-
考虑自己一天工作当中失误的地方
-
自己一天工作完成的质量与效率是否还能提高
-
应该批复的各项资料和文件
-
项目日志跟踪记录重点跟进事项,提前安排
-
项目报告例行准备,高层级和日常报告 - 可以要求团队成员每周、每两周或每月提交一次状态报告
-
管理和控制干系人参与,争取干系人积极贡献
-
领域知识和业务知识学习时间,重要 风险有提前预警
-
谁也不喜欢意外的事情,积极主动. 持续不断的交流
-
沟通能力,会议主持,文案写作,谈话能力,在复杂决策前敢于拍板
作为管理者的项目经理
团队管理、资源管理和指标实现。
- 团队的管理:找最出色的人;设定高标准,培养他、激励他;建团队。
-
决定录取一个人最重要标准是从团队建设上来考察的:
-
1) 这个人会不会给公司带来长期价值
-
2) 这个人会不会提高团队的“集体心智”
-
3) 我是否愿意和这个人一起工作
-
- 资源管理:根据优先级分配资源;掌握进度,检查结果;解决纷争,保持平衡;适应环境及优先级的变化
-
作为其手下的员工你该怎么做?
-
1) 想让你希望的事情能得到响应,需要采用办法让你要做的事情的优先级提高,让领导成为你的支持资源
-
2) 需要定期反馈事情的进度,特别是遇到问题的时候,及时向上司报告风险
-
3)有理也要饶人,领导不希望出现冲突。
-
- 指标实现:管理者做事情的最终目的就是拿到KPI,取得好的业绩。
-
作为其手下的员工你该怎么做?
-
1) 正确理解上级意图,以老板的心态工作。
-
2) 及时反馈业务上的核心点,帮助上司决策。给老板你的判断,而非等待老板的判断。管理者需要的是建议,不是让管理者一直思考。而是提供你的建议,方案,优缺点,然后交由管理者决策。
-
3)记住帮助上司成功是自己成功的最好方法。最快形成合理的方案——包含计划、任务分解、资源配备、措施保障等等。策划能力和统筹能力。
-
16. 最接近的三数之和
- 难度:
中等
- 本题涉及算法:
数组遍历
双指针
- 思路:
数组遍历
双指针
- 类似题型:
题目 16. 最接近的三数之和
给定一个包括 n 个整数的数组 nums
和 一个目标值 target
。找出 nums
中的三个整数,使得它们的和与 target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
方法一 双指针
- 解题思路:
- 左右指针向中间移动,中间同时从左向右移动
i
,并三数相加 - 通过每次
三数之和 - 目标值
,比较绝对值
- 左右指针向中间移动,中间同时从左向右移动
- 复杂度分析:
- 时间复杂度 $O(N^2)$ ,$N$ 为数组的长度
- 空间复杂度 $O(1)$
python
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums_len = len(nums)
nums.sort()
ans_sum = nums[0] + nums[1] + nums[2];
for i in range(nums_len):
left, right = i + 1 , nums_len - 1
while left < right:
curr_sum = nums[i] + nums[left] + nums[right]
if abs(curr_sum - target) < abs(ans_sum - target):
ans_sum = curr_sum
if curr_sum > target: right -= 1
elif curr_sum < target: left += 1
else: return target
return ans_sum
java
class Solution {
public int threeSumClosest(int[] nums, int target) {
int nums_len = nums.length;
Arrays.sort(nums);
int ans_sum = nums[0] + nums[1] + nums[2];
for(int i = 0 ;i<nums_len;i++) {
int left = i + 1, right = nums_len - 1;
while (left < right) {
int curr_sum = nums[i] + nums[left] + nums[right];
if (Math.abs(curr_sum - target) < Math.abs(ans_sum - target) )
ans_sum = curr_sum;
if (curr_sum > target) right --;
else if (curr_sum < target) left ++;
else return target;
}
}
return ans_sum;
}
}
- 如果你觉得本文对你有帮助,请点赞👍支持
- 如果有疑惑或者表达不到位的额地方 ,请在下面👇评论区指出
15. 三数之和
- 难度:
中等
- 本题涉及算法:
数组遍历
- 思路:
数组遍历
- 类似题型:
题目 15. 三数之和
给你一个包含 n
个整数的数组 nums
,判断 nums
中是否存在三个元素 a,b,c
,使得 a + b + c = 0
?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
方法一 数组遍历
- 解题思路:
- 首先对数组进行排序,排序后固定一个数 $nums[i]$,再使用左右指针指向 $nums[i]$ 后面的两端,数字分别为 $nums[L]$ 和 $nums[R]$,计算三个数的和 $sum$ 判断是否满足为 $0$,满足则添加进结果集
- 如果 $nums[i]$ 大于 $0$,则三数之和必然无法等于 $0$,结束循环
- 如果 $nums[i]= nums[i−1]$,则说明该数字重复,会导致结果重复,所以应该跳过
- 当 $sum0 时,$nums[L] = nums[L+1]$ 则会导致结果重复,应该跳过,$L++$
- 当 $sum0$ 时,$nums[R] =nums[R−1]$ 则会导致结果重复,应该跳过,$R–$
- 时间复杂度:
- 时间复杂度:$O(n^2)$ $n$ 为数组长度
- 空间复杂度:$O(1)$
java
class Solution {
public static List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> ans = new ArrayList();
int len = nums.length;
if(nums == null || len < 3) return ans;
Arrays.sort(nums); // 排序
for (int i = 0; i < len ; i++) {
if(nums[i] > 0) break; // 如果当前数字大于0,则三数之和一定大于0,所以结束循环
if(i > 0 && nums[i] == nums[i-1]) continue; // 去重
int L = i+1;
int R = len-1;
while(L < R){
int sum = nums[i] + nums[L] + nums[R];
if(sum == 0){
ans.add(Arrays.asList(nums[i],nums[L],nums[R]));
while (L<R && nums[L] == nums[L+1]) L++; // 去重
while (L<R && nums[R] == nums[R-1]) R--; // 去重
L++;
R--;
}
else if (sum < 0) L++;
else if (sum > 0) R--;
}
}
return ans;
}
}
python
class Solution(object):
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
nums_len = len(nums)
ans = []
if not nums or nums_len < 3: return ans
nums.sort()
for i in range(nums_len):
if nums[i] > 0: return ans
if i > 0 and nums[i] == nums[i-1]: continue
left = i + 1
right = nums_len - 1
while left < right:
if nums[left] + nums[right] + nums[i] == 0:
ans.append([nums[i] ,nums[left] ,nums[right]])
while left < right and nums[left] == nums[left + 1]:
left = left + 1
while left < right and nums[right] == nums[right - 1]:
right = right - 1
left = left + 1
right = right - 1
elif nums[left] + nums[right] + nums[i] > 0:
right = right - 1
else:
left = left + 1
return ans
14. 最长公共前缀
- 难度:
简单
- 本题涉及算法:
- 思路:
zip
- 类似题型:
题目 14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ”“。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
方法一 zip合并
- 解题思路:
- 使用 zip 根据字符串下标合并成数组,
- 判断合并后数组里元素是否都相同
- 复杂度分析:
- 时间复杂度 $O(N)$ ,$N$ 表示数组中最短字符串长度
- 空间复杂度 $O(1)$ ,使用的变量为自然数个
class Solution(object):
def longestCommonPrefix(self, strs):
ans = ''
for i in zip(*strs):
if len(set(i)) == 1:
ans += i[0]
else:
break
return ans
- 这个例子是 菜鸟编程 里关于 zip函数 介绍 Python zip() 函数
- 如果你也发现了,请为自己点赞,顺便为作者点赞👍支持
- 如果发现在别处也有类似的例题,请在下面👇评论区告诉作者
5414. 收藏清单
- 难度:
中等
- 本题涉及算法:
交集
- 思路:
交集
- 类似题型:
题目 5414. 收藏清单
给你一个数组 favoriteCompanies
,其中 favoriteCompanies[i]
是第 i 名用户收藏的公司清单 (下标从 0 开始)。
请找出不是其他任何人收藏的公司清单的子集的收藏清单,并返回该清单下标。下标需要按升序排列。
示例 1:
输入:favoriteCompanies = [["leetcode","google","facebook"],["google","microsoft"],["google","facebook"],["google"],["amazon"]]
输出:[0,1,4]
解释:
favoriteCompanies[2]=["google","facebook"] 是 favoriteCompanies[0]=["leetcode","google","facebook"] 的子集。
favoriteCompanies[3]=["google"] 是 favoriteCompanies[0]=["leetcode","google","facebook"] 和 favoriteCompanies[1]=["google","microsoft"] 的子集。
其余的收藏清单均不是其他任何人收藏的公司清单的子集,因此,答案为 [0,1,4] 。
示例 2:
输入:favoriteCompanies = [["leetcode","google","facebook"],["leetcode","amazon"],["facebook","google"]]
输出:[0,1]
解释:favoriteCompanies[2]=["facebook","google"] 是 favoriteCompanies[0]=["leetcode","google","facebook"] 的子集,因此,答案为 [0,1] 。
示例 3:
输入:favoriteCompanies = [["leetcode"],["google"],["facebook"],["amazon"]]
输出:[0,1,2,3]
提示:
1 <= favoriteCompanies.length <= 100
1 <= favoriteCompanies[i].length <= 500
1 <= favoriteCompanies[i][j].length <= 20
favoriteCompanies[i] 中的所有字符串 各不相同 。
用户收藏的公司清单也 各不相同 ,也就是说,即便我们按字母顺序排序每个清单, favoriteCompanies[i] != favoriteCompanies[j] 仍然成立。
所有字符串仅包含小写英文字母。
方法一 判断交集
- 题目理解:
- 题目可以理解为,两个清单是否为包含关系
- 因此我们的解题思路是:通过计算两个清单的 交集 ,判断两个清单的交集是否为包含关系
- 算法流程:
- 列表转化为集合,可计算两个列表的交集 对于实现交集可以参考 Python实现”两个数组的交集”的两种方法
- 判断两集合的交集是否为某一集合
x&y == x
,来确定清单
class Solution(object):
def peopleIndexes(self, favoriteCompanies):
fav_set = [set(sub))) for sub in favoriteCompanies]
ans = []
for i,x in enumerate(fav_set):
flag = 0
for j, y in enumerate(fav_set):
if i ==j:
continue
if x&y == x: # 通过判断交集,来防止数据重复录入
flag = 1
break
if flag == 0:
ans.append(i)
return ans
- 如果你觉得本文对你有帮助,请点赞👍支持
- 如果有疑惑或者表达不到位的额地方 ,请在下面👇评论区指出
5413. 重新排列句子中的单词
- 难度:
中等
- 本题涉及算法:
lambda
- 思路:
lambda
- 类似题型:
题目 5413. 重新排列句子中的单词
「句子」是一个用空格分隔单词的字符串。给你一个满足下述格式的句子 text
:
- 句子的首字母大写
text
中的每个单词都用单个空格分隔。 请你重新排列text
中的单词,使所有单词按其长度的升序排列。如果两个单词的长度相同,则保留其在原句子中的相对顺序。
请同样按上述格式返回新的句子。
示例 1:
输入:text = "Leetcode is cool"
输出:"Is cool leetcode"
解释:句子中共有 3 个单词,长度为 8 的 "Leetcode" ,长度为 2 的 "is" 以及长度为 4 的 "cool" 。
输出需要按单词的长度升序排列,新句子中的第一个单词首字母需要大写。
示例 2:
输入:text = "Keep calm and code on"
输出:"On and keep calm code"
解释:输出的排序情况如下:
"On" 2 个字母。
"and" 3 个字母。
"keep" 4 个字母,因为存在长度相同的其他单词,所以它们之间需要保留在原句子中的相对顺序。
"calm" 4 个字母。
"code" 4 个字母。
示例 3:
输入:text = "To be or not to be"
输出:"To be or to be not"
提示:
text 以大写字母开头,然后包含若干小写字母以及单词间的单个空格。
1 <= text.length <= 10^5
方法一 按照元素长度排序
- 使用 lambda 轻松搞定排序
class Solution:
def arrangeWords(self, text: str) -> str:
text = text.lower() # 首字母转小写
text = text.split(" ") # 通过 空格 分割成数组
text.sort(key=lambda x: len(x)) # 使用 lambda 按照元素长度排序
return ' '.join(text).capitalize() # 最后首字母大写
- 如果你觉得本文对你有帮助,请点赞👍支持
- 如果有疑惑或者表达不到位的额地方 ,请在下面👇评论区指出
339 post articles, 43 pages.