• 某公司常见题刷题笔记


    LeetCode搞起来,虽说和实际业务没啥联系,但现在就卷起来了,没办法被迫卷起来。

    1,滑动平均值,官网

    给定窗口大小size,然后每次增加一个值value放入窗口,求此窗口内的平均值

    1. class MovingAverage:
    2. def __init__(self, size: int):
    3. self.size = size
    4. self.sum = 0
    5. self.q = deque()
    6. def next(self, val: int) -> float:
    7. if len(self.q) == self.size:
    8. self.sum -= self.q.popleft()
    9. self.sum += val
    10. self.q.append(val)
    11. return self.sum / len(self.q)

    2,正则匹配力扣网

    用*可以表示与前面的字母相同的字母,比如a*与aa是匹配的;用.可以表示任意字符,比如a.与ab是匹配的。由于要匹配的字符串长度是未知的,匹配字段长度与前者长度可存在差异,所以dp无疑

    1. class Solution:
    2. def isMatch(self, s: str, p: str) -> bool:
    3. m, n = len(s), len(p)#s是字符串长度
    4. def matches(i: int, j: int) -> bool:
    5. if i == 0:
    6. return False
    7. if p[j - 1] == '.':
    8. return True
    9. return s[i - 1] == p[j - 1]
    10. f = [[False] * (n + 1) for _ in range(m + 1)]
    11. f[0][0] = True
    12. for i in range(m + 1):
    13. for j in range(1, n + 1):
    14. if p[j - 1] == '*':
    15. f[i][j] |= f[i][j - 2]
    16. if matches(i, j - 1):
    17. f[i][j] |= f[i - 1][j]
    18. else:
    19. if matches(i, j):
    20. f[i][j] |= f[i - 1][j - 1]
    21. return f[m][n]

    3,有效的数独,网页

    判断9*9的数组是否是有效的数独,9*9分成3*3的大网格,每个网格都是3*3,1~9在此网格中只能出现一次,在9*9的每一行和每一列也只能出现一次。给定的.是空值(空白的),给定的数字是已知的,判断给定的数字是否是有效的数独。

    1. class Solution {
    2. public boolean isValidSudoku(char[][] board) {
    3. int[][] rows = new int[9][9];
    4. int[][] columns = new int[9][9];
    5. int[][][] subboxes = new int[3][3][9];
    6. for (int i = 0; i < 9; i++) {
    7. for (int j = 0; j < 9; j++) {
    8. char c = board[i][j];
    9. if (c != '.') {
    10. int index = c - '0' - 1;
    11. rows[i][index]++;
    12. columns[j][index]++;
    13. subboxes[i / 3][j / 3][index]++;
    14. if (rows[i][index] > 1 || columns[j][index] > 1 || subboxes[i / 3][j / 3][index] > 1) {
    15. return false;
    16. }
    17. }
    18. }
    19. }
    20. return true;
    21. }
    22. }

    4,买卖股票的最大利润,link

    给定数组prices,其中数字是当天收盘价格,可选择买入和卖出。

    1. class Solution {
    2. public int maxProfit(int[] prices) {
    3. int n = prices.length;
    4. int[][] dp = new int[n][2];
    5. dp[0][0] = 0;
    6. dp[0][1] = -prices[0];
    7. for (int i = 1; i < n; ++i) {
    8. dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] + prices[i]);
    9. dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] - prices[i]);
    10. }
    11. return dp[n - 1][0];
    12. }
    13. }

    5,盛水最多,web link

    此题不同于接雨水,给定边缘高度heights,找出其中两个边,使其满足其中盛水最多。

     6,整数转罗马数字,website link

    1. 字符 数值
    2. I 1
    3. V 5
    4. X 10
    5. L 50
    6. C 100
    7. D 500
    8. M 1000
    9. 罗马数字 2 写做 II ,即为两个并列的 112 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II
    10. 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
    11. I 可以放在 V (5) 和 X (10) 的左边,来表示 49
    12. X 可以放在 L (50) 和 C (100) 的左边,来表示 4090
    13. C 可以放在 D (500) 和 M (1000) 的左边,来表示 400900
    1. class Solution:
    2. THOUSANDS = ["", "M", "MM", "MMM"]
    3. HUNDREDS = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]
    4. TENS = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]
    5. ONES = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]
    6. def intToRoman(self, num: int) -> str:
    7. return Solution.THOUSANDS[num // 1000] + \
    8. Solution.HUNDREDS[num % 1000 // 100] + \
    9. Solution.TENS[num % 100 // 10] + \
    10. Solution.ONES[num % 10]

    7,吃糖果,link

    n个糖果,其中类型在candyType中,其长度为n,set()后得到的个数即为类型个数,医生建议最多吃n/2个,其中n为偶数,那么最多吃到的类型有几个?这不是最简单的么,果然是。

    1. class Solution:
    2. def distributeCandies(self, candyType: List[int]) -> int:
    3. length=len(candyType)
    4. types=set(candyType)
    5. type_num=len(types)
    6. return min(length//2,type_num)

    8,最长递增子序列,link

    此题是最长递增子序列而非枚举所有的递增子序列

    1. class Solution:
    2. def lengthOfLIS(self, nums: List[int]) -> int:
    3. if not nums:
    4. return 0
    5. dp = []
    6. for i in range(len(nums)):
    7. dp.append(1)
    8. for j in range(i):
    9. if nums[i] > nums[j]:
    10. dp[i] = max(dp[i], dp[j] + 1)
    11. return max(dp)

    愿我们终有重逢之时,而你还记得我们曾经讨论的话题 

  • 相关阅读:
    2)采样数学表示
    Vue项目使用echarts实现图表数据展示
    AI数字人凭什么杀疯了?AI技术赋予数字人多元化应用场景
    Salesforce-Visualforce-6.静态资源(Static Resources)
    学习笔记二十四:K8S四层代理Service
    Python美化桌面—自制桌面宠物
    仅此一招,再无消息乱序的烦恼
    手把手教你Nginx 配置 HTTPS 完整过程
    Java Timer使用介绍
    【附源码】计算机毕业设计JAVA忆居民宿管理
  • 原文地址:https://blog.csdn.net/SPESEG/article/details/128039101