给你一个字符串数组 words ,每一个字符串长度都相同,令所有字符串的长度都为 n 。
每个字符串 w o r d s [ i ] words[i] words[i] 可以被转化为一个长度为 n − 1 n - 1 n−1 的 差值整数数组 d i f f e r e n c e [ i ] difference[i] difference[i],
其中对于 0 ≤ j ≤ n − 2 0 \le j\le n - 2 0≤j≤n−2 有 d i f f e r e n c e [ i ] [ j ] = w o r d s [ i ] [ j + 1 ] − w o r d s [ i ] [ j ] difference[i][j] = words[i][j+1] - words[i][j] difference[i][j]=words[i][j+1]−words[i][j]。
注意:
两个字母的差值定义为它们在字母表中 位置 之差,也就是说 ‘a’ 的位置是 0 ,‘b’ 的位置是 1 ,‘z’ 的位置是 25 。
比方说,字符串 “acb” 的差值整数数组是 [2 - 0, 1 - 2] = [2, -1] 。
words 中所有字符串 除了一个字符串以外 ,其他字符串的差值整数数组都相同。你需要找到那个不同的字符串。
请你返回 words中 差值整数数组 不同的字符串。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/odd-string-difference
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:
给你两个字符串数组 queries 和 dictionary 。数组中所有单词都只包含小写英文字母,且长度都相同。
一次 编辑 中,你可以从 queries 中选择一个单词,将任意一个字母修改成任何其他字母。从 queries 中找到所有满足以下条件的字符串:不超过 两次编辑内,字符串与 dictionary 中某个字符串相同。
请你返回 queries 中的单词列表,这些单词距离 dictionary 中的单词 编辑次数 不超过 两次 。单词返回的顺序需要与 queries 中原本顺序相同。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/words-within-two-edits-of-dictionary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解:
给你一个下标从 0 开始的数组 nums ,它包含若干正整数,表示数轴上你需要摧毁的目标所在的位置。同时给你一个整数 space 。
你有一台机器可以摧毁目标。给机器 输入 nums[i] ,这台机器会摧毁所有位置在 nums[i] + c * space 的目标,其中 c 是任意非负整数。你想摧毁 nums 中 尽可能多 的目标。
请你返回在摧毁数目最多的前提下,nums[i] 的 最小值 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/destroy-sequential-targets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解:
class Solution:
def destroyTargets(self, nums: List[int], space: int) -> int:
c = collections.Counter(list(map(lambda x: x % space, nums)))
m = max(c.values())
cs = [k for k, v in c.items() if v == m]
s = set(cs)
ret = 10 ** 9
for x in nums:
if (x % space) in s:
ret = min(ret, x)
return ret
给你一个下标从 0 开始的非负整数数组 nums 。对于 nums 中每一个整数,你必须找到对应元素的 第二大 整数。
如果 nums[j] 满足以下条件,那么我们称它为 nums[i] 的 第二大 整数:
j > i
nums[j] > nums[i]
恰好存在 一个 k 满足 i < k < j 且 nums[k] > nums[i] 。
如果不存在 nums[j] ,那么第二大整数为 -1 。
比方说,数组 [1, 2, 4, 3] 中,1 的第二大整数是 4 ,2 的第二大整数是 3 ,3 和 4 的第二大整数是 -1 。
请你返回一个整数数组 answer ,其中 answer[i]是 nums[i] 的第二大整数
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/next-greater-element-iv
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解:
import bisect
class Solution:
def secondGreaterElement(self, nums: List[int]) -> List[int]:
n = len(nums)
stack = []
A = [-1 for _ in range(n)]
sa = []
for i, x in enumerate(nums):
while sa and x > sa[0][0]:
A[sa[0][1]] = i
del sa[0]
while stack and x > stack[-1][1]:
j, y = stack.pop()
bisect.insort(sa, (y, j))
stack.append((i, x))
return [nums[x]if x != -1 else -1 for x in A]