16
タイトルの説明:
n個の整数とターゲット値targetを含む配列numsが与えられます。それらの合計がターゲットに最も近くなるように、numsで3つの整数を見つけます。これらの3つの数値の合計を返します。入力のセットごとに1つの答えしかないと仮定します。
例:
回答:
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
n = len(nums)
nums.sort()
re_min = 0 #存储当前最小的差值
for i in range(n):
low = i+1
high = n-1
while low < high:
three_sum = nums[i] + nums[low] + nums[high]
x = target - three_sum #当前三数的差值
if re_min == 0:
re_min = abs(x)
sum_min = three_sum #sum_min为当前最接近的和
if abs(x) < re_min:
re_min = abs(x)
sum_min = three_sum
if three_sum == target:
return target
elif three_sum < target:
low += 1
else:
high -= 1
return sum_min
424
タイトルの説明:
大文字の英字のみで構成される文字列を指定します。任意の位置の文字を別の文字に置き換えることができ、合計で最大k回まで置き換えることができます。上記の操作を実行した後、繰り返される文字を含む最長の部分文字列の長さを見つけます。
例:
回答:
class Solution:
def characterReplacement(self, s: str, k: int) -> int:
#滑动窗口
from collections import defaultdict
left = 0
cur = defaultdict(int)
res = 0
for right, val in enumerate(s):
cur[val] += 1
# 找到目前最大字符个数,看该窗口是否多余翻转k个字符
while right - left + 1 - max(cur.values()) > k:
cur[s[left]] -= 1
left += 1
res = max(res, right - left + 1)
return res
剣はoffer58-Iを指します
タイトルの説明:
英語の文を入力し、文の単語の順序を逆にしますが、単語の文字の順序は変わりません。簡単にするために、句読点は通常の文字のように扱われます。たとえば、「私は学生です。」という文字列を入力してから、「学生。aamI」を出力します。
例:
回答:
class Solution:
def reverseWords(self, s: str) -> str:
s = s.strip() # 删除首尾空格
i = j = len(s) - 1
res = []
while i >= 0:
while i >= 0 and s[i] != ' ':
i -= 1 # 搜索首个空格
res.append(s[i + 1: j + 1]) # 添加单词
while s[i] == ' ':
i -= 1 # 跳过单词间空格
j = i # j 指向下个单词的尾字符
return ' '.join(res) # 拼接并返回
面接の質問17.10
タイトルの説明:
配列の半分以上を占める要素は、メイン要素と呼ばれます。整数配列が与えられたら、その主要な要素を見つけます。そうでない場合は、-1を返します。
例:
回答:
class Solution:
def majorityElement(self, nums: List[int]) -> int:
for i in set(nums):
if nums.count(i)>len(nums)/2:
return i
return -1
面接の質問17.11
タイトルの説明;
単語を含む大きなテキストファイルがあり、任意の2つの単語が与えられた場合、このファイル内のこれら2つの単語間の最短距離(分離された単語の数)を見つけます。このファイルで検索プロセスが複数回繰り返され、そのたびに検索される単語が異なる場合、これを最適化できますか?
例:
回答:
class Solution:
def findClosest(self, words: List[str], word1: str, word2: str) -> int:
d=defaultdict(list)
for i in range(len(words)):
d[words[i]].append(i)
res=float('inf')
for i in d[word1]:
for j in d[word2]:
res=min(res,abs(i-j))
return res