2023 年第 2 周总结

发布于 2023-01-08  41 次阅读


本周学习情况

  • LeetCode 每日一题全勤
  • 通过 cs224n Lecture 1 ,学习了 Word Vectors 的基本概念及 word2vec 的基本思想,包括 Objective function 的推导、优化、梯度下降等。
  • 完成了 cs224n Assignment 1 ,实践了 Count-Based Word Vectors 的构造过程,并学习了 co-occurrence matrix 、 SVD 、 Truncated SVD 的概念与使用。
  • 在 assignment 1 中,还利用现有的 GloVe 模型,构造了一个简单的 Prediction-Based Word Vectors ,并学习了 Cosine Similarity 的概念及其应用 ( most_similar()distance() )。

本周的 cs224n 学习笔记如下:

周赛情况

20分钟解出 3 题,第四题确实没什么思路。

Problem 1 6283. 正整数和负整数的最大计数

思路

简单模拟题。

代码

class Solution:
    def maximumCount(self, nums: List[int]) -> int:
        pos = neg = 0
        for num in nums:
            if num > 0: pos += 1
            elif num < 0: neg += 1
        return pos if pos > neg else neg

Problem 2 6285. 执行 K 次操作后的最大分数

思路

每次取出最大值累加到分数上,然后除以 3 上取整放回数组中,显然用大根堆即可,值取负。

代码

class Solution:
    def maxKelements(self, nums: List[int], k: int) -> int:
        n = len(nums)
        for idx in range(n):
            nums[idx] *= -1
        heapify(nums)
        ans = 0
        while k:
            cur = -heappop(nums)
            ans += cur
            k -= 1
            heappush(nums,-ceil(cur / 3))
        return ans

Problem 3 6284. 使字符串总不同字符的数目相等

思路

一开始从字典、集合角度想,还好没钻牛角尖,想起来可以枚举字符做,遍历所有交换情况,无非是 26 *26 种可能,完全不会超时。

代码

class Solution:
    def isItPossible(self, word1: str, word2: str) -> bool:
        nums_1 = [0 for _ in range(26)]
        nums_2 = list(nums_1)

        def cnt() -> bool:
            x = y = 0
            for num in nums_1:
                if num:
                    x += 1
            for num in nums_2:
                if num:
                    y += 1
            return x == y

        for ch in word1:
            nums_1[ord(ch) - ord('a')] += 1
        for ch in word2:
            nums_2[ord(ch) - ord('a')] += 1
        for i in range(26):
            for j in range(26):
                if nums_1[i] and nums_2[j]:
                    nums_1[i] -= 1
                    nums_1[j] += 1
                    nums_2[j] -= 1
                    nums_2[i] += 1
                    if cnt(): return True
                    else:
                        nums_1[i] += 1
                        nums_1[j] -= 1
                        nums_2[j] += 1
                        nums_2[i] -= 1
        return False

Problem 4 6306. 过桥的时间

思路

只能看出来要分两个堆,来取出两岸效率最低的工人。时间差上的问题解决不了,没写出来。