二维数组查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
重点:
- 数组为空
- 排好序
- 上面行的右边的数也可以比下面行左边的数大
顺序查找
def Find(self, target, array):
# write code here
if len(array)==0 or len(array[0])==0:
return 0
l=0
r=len(array[0])-1
for i in range(len(array)):
if array[i][0]<=target<=array[i][-1]:
for j in range(len(array[i])):
if array[i][j]==target:
return True
return False
二分查找
def Find(self, target, array):
# write code here
if len(array)==0 or len(array[0])==0:
return 0
for i in range(len(array)):
if array[i][0]<=target<=array[i][-1]:
l=0
r=len(array[0])-1
while(l<=r):
mid=l+(r-l)//2
if array[i][mid]<target :
l=mid+1
elif array[i][mid]>target:
r=mid-1
else:
return True
return False
替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
直接替换
def replaceSpace(self, s):
# write code here
return s.replace(" ","%20")
正则表达式
import re
class Solution:
def replaceSpace(self, s):
# write code here
s=re.sub(r" ","%20",s)
return s
从尾到头打印链表
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
简单列表保存
def printListFromTailToHead(self, listNode):
# write code here
res=[]
while listNode:
res.append(listNode.val)
listNode=listNode.next
return res[::-1] #逆序打印
递归
def printListFromTailToHead(self, listNode):
res=[]
def printListnode(listNode):
# write code here
if listNode:
printListnode(listNode.next)#先递归到最后一层
res.append(listNode.val)#添加值,退出函数,返回到上一层函数中的这行,继续添加值
printListnode(listNode)
return res
重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
思路:
递归并正确分割前序和中序序列
前序分割为左子树和右子树,左子树的开头是第二个数,中间包含节点的数量为中序从0到根节点的数量
所以是pre[1:tin.index(pre[0])+1]
右子树是剩下的部分
同理,中序左子树是从左边到根节点的部分,tin[:tin.index(pre[0])]
递归
def reConstructBinaryTree(self, pre, tin):
# write code here
if len(pre)==0:
return None
if len(pre)==1:
return TreeNode(pre[0])
root=TreeNode(pre[0])
tinL=tin[:tin.index(pre[0])]
tinR=tin[tin.index(pre[0])+1:]
root.left=self.reConstructBinaryTree(pre[1:tin.index(pre[0])+1],tinL)
root.right=self.reConstructBinaryTree(pre[tin.index(pre[0])+1:],tinR)
return root
两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路:
一个栈入队列,一个栈出队列,当出队列为空时,将入队列栈全部压到出队列栈中
ps: 还得自己写构造函数
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack1=[]
self.stack2=[]
def push(self, node):
# write code here
self.stack1.append(node)
def pop(self):
# return xx
if self.stack2 ==[]:
if not self.stack1:
return None
while self.stack1:
self.stack2.append(self.stack1.pop())
return self.stack2.pop()
return self.stack2.pop()