二维数组查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
重点:
1. 数组为空
2. 排好序
3. 上面行的右边的数也可以比下面行左边的数大
顺序查找
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()