895. 最大频率栈
困难
相关标签
相关企业
设计一个类似堆栈的数据结构,将元素推入堆栈,并从堆栈中弹出出现频率最高的元素。
实现 FreqStack 类:
FreqStack() 构造一个空的堆栈。
void push(int val) 将一个整数 val 压入栈顶。
int pop() 删除并返回堆栈中出现频率最高的元素。
如果出现频率最高的元素不只一个,则移除并返回最接近栈顶的元素。
示例 1:
输入:
[“FreqStack”,“push”,“push”,“push”,“push”,“push”,“push”,“pop”,“pop”,“pop”,“pop”],
[[],[5],[7],[5],[7],[4],[5],[],[],[],[]]
输出:[null,null,null,null,null,null,null,5,7,5,4]
解释:
#超时了!!!
class FreqStack:
def __init__(self):
self.l1=[]
self.dic={}
def push(self, val: int) -> None:
self.l1.append(val)
def pop(self) -> int:
for i in list(set(self.l1)):
if self.l1.count(i) not in self.dic:
self.dic[self.l1.count(i)] = []
self.dic[self.l1.count(i)].append(i)
else:
self.dic[self.l1.count(i)].append(i)
l2=self.l1[::-1]
print(self.dic)
for j in l2:
if j in self.dic[max(self.dic)]:
del l2[l2.index(j)]
self.l1=l2[::-1]
self.dic={}
return j
25. K 个一组翻转链表
已解答
困难
相关标签
相关企业
给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]
#转数组
class Solution:
def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
a,b=0,[]
l1=head
while l1:
a+=1
b.append(l1.val)
l1=l1.next
for i in range(a//k):
b[i*k:((i+1)*k)]=b[i*k:((i+1)*k)][::-1]
l2=head
for i in range(len(b)):
l2.val=b[i]
l2=l2.next
return head
899. 有序队列
已解答
困难
相关标签
相关企业
给定一个字符串 s 和一个整数 k 。你可以从 s 的前 k 个字母中选择一个,并把它加到字符串的末尾。
返回 在应用上述步骤的任意数量的移动后,字典上最小的字符串 。
示例 1:
输入:s = “cba”, k = 1
输出:“acb”
解释:
在第一步中,我们将第一个字符(“c”)移动到最后,获得字符串 “bac”。
在第二步中,我们将第一个字符(“b”)移动到最后,获得最终结果 “acb”。
示例 2:
输入:s = “baaca”, k = 3
输出:“aaabc”
解释:
在第一步中,我们将第一个字符(“b”)移动到最后,获得字符串 “aacab”。
在第二步中,我们将第三个字符(“c”)移动到最后,获得最终结果 “aaabc”。
提示:
示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]
class Solution:
def orderlyQueue(self, s: str, k: int) -> str:
if k==1:
b,c,e=s[0],[],[]
for i in s:
if b > i:
b=i
for j in range(len(s)):
if s[j] == b:
c.append(s[j:] + s[0:j])
return min(c)
else:
return "".join(sorted(s))
4. 寻找两个正序数组的中位数
已解答
困难
相关标签
相关企业
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
a=nums1+nums2
if a:
a.sort()
if len(a) & 1:
return a[len(a)//2]
else:
return (a[len(a)//2] + a[len(a)//2-1]) /2