本周学习情况
- 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 学习笔记如下:
- cs224n Lecture 1 Word Vectors
- cs224n Assignment 1 Exploring Word Vectors
- 以及 Solution for Assignment 点击下载
周赛情况
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. 过桥的时间
思路
只能看出来要分两个堆,来取出两岸效率最低的工人。时间差上的问题解决不了,没写出来。
Comments NOTHING