翻转单词
区别于 https://leetcode.cn/problems/reverse-words-in-a-string/
Reverse.py
class Solution:
# 翻转字符数组
def reversestring(self, nums, left, right):
while left <= right:
nums[left], nums[right] = nums[right], nums[left]
left += 1
right -= 1
return None
# 翻转每个单词
def reverse_echo_word(self, nums):
s = 0
e = 0
n = len(nums)
while s < n:
while e < n and nums[e] != ' ':
e += 1
# e会跳出循环等于n 所以-1
self.reversestring(nums, s, e - 1)
# 从下一个单词开始
s = e + 1
e += 1
return None
def reverseWords(self, s):
li = list(s)
self.reversestring(li, 0, len(li) - 1)
self.reverse_echo_word(li)
return ''.join(li)
if __name__ == "__main__":
# s = "hello world"
s = "we are from China"
ss = Solution()
print(ss.reverseWords(s))
Maxqueue.cpp
#include<cstdio>
#include<iostream>
#include<limits.h>
#include<queue>
using namespace std;
class MaxQueue{
queue<int> a,b;
public:
MaxQueue(){
}
void add(int v)
{
a.push(v);
}
int poll()//正常弹出元素
{
int num;
num = a.front();
a.pop();
return num;
}
int pollMax()
{
int max=INT_MIN,t;
while(!a.empty())//把队列a压入队列b中,找队列a中最大的元素
{
t = a.front();
if(t > max)
max = t;
a.pop();
b.push(t);
}
while(!b.empty())//除了最大的元素,再把队列b中的元素压入队列a中
{
t = b.front();
b.pop();
if(t == max)
continue;
a.push(t);
}
return max;
}
};
int main()
{
MaxQueue queue;
queue.add(3);
queue.add(4);
queue.add(1);
queue.add(2);
cout << queue.pollMax() <<endl;
cout << queue.poll() <<endl;
cout << queue.pollMax() <<endl;
cout << queue.poll() <<endl;
return 0;
}
实习maxqueue
区别于 https://leetcode.cn/problems/dui-lie-de-zui-da-zhi-lcof/
https://blog.csdn.net/ly0724ok/article/details/118966507
import queue
class MaxQueue:
def __init__(self):
self.deque = queue.deque()
def max_value(self) -> int:
# 辅助栈
maxv = float('-INF')
s = queue.deque()
# 队列不空时,一边更新最大值,一遍加入辅助栈
if not self.deque:return -1
while self.deque:
num = self.deque[0]
if num > maxv:
maxv = num
s.append(num)
self.deque.popleft()
while s:
num = s[0]
if maxv == num:
continue
else:
self.deque.append(num)
return maxv
def push_back(self, value: int) -> None:
self.deque.append(value)
def pop_front(self) -> int:
return self.deque.popleft() if self.deque else -1
q = MaxQueue()
q.push_back(3)
q.push_back(4)
q.push_back(1)
q.push_back(2)
print(q.max_value())
print(q.pop_front())
print(q.max_value())
print(q.pop_front())
二叉树的序列化和反序列化
https://leetcode.cn/problems/h54YBf/
层序遍历
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Codec:
from collections import deque
class Codec:
def serialize(self, root):
if not root:
return ""
dq = deque([root])
res = []
while dq:
node = dq.popleft()
if node:
res.append(str(node.val))
dq.append(node.left)
dq.append(node.right)
else:
res.append('None')
return ','.join(res)
def deserialize(self, data):
if not data:
return []
dataList = data.split(',')
root = TreeNode(int(dataList[0]))
dq = deque([root])
i = 1
while dq:
node = dq.popleft()
if dataList[i] != 'None':
node.left = TreeNode(int(dataList[i]))
dq.append(node.left)
i += 1
if dataList[i] != 'None':
node.right = TreeNode(int(dataList[i]))
dq.append(node.right)
i += 1
return root
# Your Codec object will be instantiated and called as such:
# ser = Codec()
# deser = Codec()
# ans = deser.deserialize(ser.serialize(root))
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Codec:
def serialize(self, root):
s = ""
queue = []
queue.append(root)
while queue:
root = queue.pop(0)
if root:
s += str(root.val)
queue.append(root.left)
queue.append(root.right)
else:
s += "n"
s += " "
print(s)
return s
def deserialize(self, data):
tree = data.split()
print(tree)
if tree[0] == "n":
return None
queue = []
root = TreeNode(int(tree[0]))
queue.append(root)
i = 1
while queue:
cur = queue.pop(0)
if cur == None:
continue
cur.left = TreeNode(int(tree[i])) if tree[i] != "n" else None
cur.right = TreeNode(int(tree[i + 1])) if tree[i + 1] != "n" else None
i += 2
queue.append(cur.left)
queue.append(cur.right)
return root
# Your Codec object will be instantiated and called as such:
# ser = Codec()
# deser = Codec()
# ans = deser.deserialize(ser.serialize(root))