Home

项目管理日常

项目经理每日工作

  1. 项目目标,计划,计划,再计划

  2. 总结自己一天的计划完成情况

  3. 考虑明天应该做的主要工作,二八原则,授权

  4. 了解每个项目小组的工作进展情况,并进行相应指导

  5. 提前考虑到实施过程中的缺陷与不足之处,并想出改善的方法与步骤

  6. 记住每一位项目团队的负责人及团队组长的名字. 干活负责程度

  7. 每天必须看的 各种数据报表和清单

  8. 考虑自己一天工作当中失误的地方

  9. 自己一天工作完成的质量与效率是否还能提高

  10. 应该批复的各项资料和文件

  11. 项目日志跟踪记录重点跟进事项,提前安排

  12. 项目报告例行准备,高层级和日常报告 - 可以要求团队成员每周、每两周或每月提交一次状态报告

  13. 管理和控制干系人参与,争取干系人积极贡献

  14. 领域知识和业务知识学习时间,重要 风险有提前预警

  15. 谁也不喜欢意外的事情,积极主动. 持续不断的交流

  16. 沟通能力,会议主持,文案写作,谈话能力,在复杂决策前敢于拍板

Read more

每日晨会

每日晨会

    • 时间:9:20–9:30 时长:10分钟 人员:全体
    • 内容可以是:闲聊,游戏,工作,改进,10分钟演讲,案例分析,知识分享,经验学习
  1. 在每日晨会上,增加一个板块, 有什么难点或者纠结的地方,需要帮助吗?
  2. 希望晨会有价值

Read more

作为管理者的项目经理

团队管理、资源管理和指标实现。

  1. 团队的管理:找最出色的人;设定高标准,培养他、激励他;建团队。
  • 决定录取一个人最重要标准是从团队建设上来考察的:

    • 1) 这个人会不会给公司带来长期价值

    • 2) 这个人会不会提高团队的“集体心智”

    • 3) 我是否愿意和这个人一起工作

  1. 资源管理:根据优先级分配资源;掌握进度,检查结果;解决纷争,保持平衡;适应环境及优先级的变化
  • 作为其手下的员工你该怎么做?

    • 1) 想让你希望的事情能得到响应,需要采用办法让你要做的事情的优先级提高,让领导成为你的支持资源

    • 2) 需要定期反馈事情的进度,特别是遇到问题的时候,及时向上司报告风险

    • 3)有理也要饶人,领导不希望出现冲突。

  1. 指标实现:管理者做事情的最终目的就是拿到KPI,取得好的业绩。
  • 作为其手下的员工你该怎么做?

    • 1) 正确理解上级意图,以老板的心态工作。

    • 2) 及时反馈业务上的核心点,帮助上司决策。给老板你的判断,而非等待老板的判断。管理者需要的是建议,不是让管理者一直思考。而是提供你的建议,方案,优缺点,然后交由管理者决策。

    • 3)记住帮助上司成功是自己成功的最好方法。最快形成合理的方案——包含计划、任务分解、资源配备、措施保障等等。策划能力和统筹能力。

Read more

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;
    }
}
  • 如果你觉得本文对你有帮助,请点赞👍支持
  • 如果有疑惑或者表达不到位的额地方 ,请在下面👇评论区指出

Read more

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

Read more

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() 函数
  • 如果你也发现了,请为自己点赞,顺便为作者点赞👍支持
  • 如果发现在别处也有类似的例题,请在下面👇评论区告诉作者

Read more

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] 仍然成立。
所有字符串仅包含小写英文字母。

方法一 判断交集

  • 题目理解
    • 题目可以理解为,两个清单是否为包含关系
    • 因此我们的解题思路是:通过计算两个清单的 交集 ,判断两个清单的交集是否为包含关系
  • 算法流程
    1. 列表转化为集合,可计算两个列表的交集 对于实现交集可以参考 Python实现”两个数组的交集”的两种方法
    2. 判断两集合的交集是否为某一集合 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
  • 如果你觉得本文对你有帮助,请点赞👍支持
  • 如果有疑惑或者表达不到位的额地方 ,请在下面👇评论区指出

Read more

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() # 最后首字母大写
  • 如果你觉得本文对你有帮助,请点赞👍支持
  • 如果有疑惑或者表达不到位的额地方 ,请在下面👇评论区指出

Read more