1. 题目一
给出题目一的试题链接如下:
1. 解题思路
这一题同样没啥好多说的,就是找到最大值和最小值,然后计算一下最大公约数即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def findGCD(self, nums: List[int]) -> int:
def gcd(x, y):
if x % y == 0:
return y
return gcd(y, x % y)
return gcd(max(nums), min(nums))
提交代码评测得到:耗时48ms,占用内存14.3MB。
2. 题目二
给出题目二的试题链接如下:
1. 解题思路
这一题我的思路是通过trie树进行的代码实现,倒是也没啥,然后看了一下别人的解法,感觉有点做烦了,因为要求数组中的数据总数和总的数据的位数是相同的,因此事实上大部分的数字事实上不会出现在给出的数组当中的。
因此,我们只要枚举出对应位数下的所有数字,总是找到没出现过的数字的几率更大。
不过无论如何,我们的方法总是更加一般性一点。
2. 代码实现
给出python代码实现如下:
class Trie:
def __init__(self, n):
self.trie = {}
self.length = n
def add(self, s):
trie = self.trie
for c in s:
trie = trie.setdefault(c, {})
trie[c] = "eos"
def get_another(self):
def dfs(trie, k):
if k == self.length:
return "eos"
if "0" not in trie:
return "0" * (self.length - k)
elif "1" not in trie:
return "1" * (self.length - k)
else:
s1 = "0" + dfs(trie["0"], k+1)
s2 = "1" + dfs(trie["1"], k+1)
return s1 if len(s1) < len(s2) else s2
return dfs(self.trie, 0)
class Solution:
def findDifferentBinaryString(self, nums: List[str]) -> str:
n = len(nums)
trie = Trie(n)
for s in nums:
trie.add(s)
return trie.get_another()
提交代码评测得到:耗时36ms,占用内存14.5MB。
3. 题目三
给出题目三的试题链接如下:
1. 解题思路
这一题解法非常之暴力,因为数字本身并不大,因此,就可以直接把所有可能的结果全部一次性计算出来,然后计算和target之间的最小绝对值即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def minimizeTheDifference(self, mat: List[List[int]], target: int) -> int:
seen = [0]
for line in mat:
new = {x+y for x in line for y in seen}
seen = list(new)
return min([abs(x-target) for x in seen])
提交代码评测得到:耗时7316ms,占用内存15.2MB。
4. 题目四
给出题目四的试题链接如下:
这一题没有搞定,有兴趣的读者可以看看官方解答,挺巧妙的,很有意思的一道题目。