// 剑指offer1.二维数组中的查找
public boolean Find(int target, int [][] array) {
int lo = 0, hi = array.length-1;
for(int j = 0; j < array[0].length; j ++) {
lo = 0;
while(lo <= hi) {
int mid = (lo + hi) >> 1;
if(array[mid][j] == target) {
return true;
}
else if(array[mid][j] > target) {
hi = mid-1;
}
else {
lo = mid + 1;
}
}
}
return false;
}
// 剑指offer2.替换空格
public String replaceSpace(StringBuffer str) {
return str.toString().replaceAll(" ", "%20");
}
// 剑指offer3.从尾到头打印链表
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> res = new ArrayList<>();
while(listNode != null) {
res.add(0, listNode.val);
listNode = listNode.next;
}
return res;
}
// 剑指offer4.重建二叉树
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
if(pre.length == 0 || in.length == 0) return null;
TreeNode root = reConstructBinaryTree(pre, 0, pre.length, in, 0, in.length);
return root;
}
public TreeNode reConstructBinaryTree(int [] pre,int startPre, int endPre,
int [] in, int startIn, int endIn) {
if(startPre >= endPre || startIn >= endIn)
return null;
TreeNode root = new TreeNode(pre[startPre]);
for(int i = startIn; i < endIn; i ++) {
if(in[i] == pre[startPre]) {
root.left = reConstructBinaryTree(pre, startPre+1, startPre+i-startIn+1, in, startIn, i);
root.right = reConstructBinaryTree(pre, startPre+i-startIn+1, endPre, in, i+1, endIn);
}
}
return root;
}
// 剑指offer5.用两个栈实现队列
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
while(!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
stack2.push(node);
}
public int pop() {
while(!stack2.isEmpty()) {
stack1.push(stack2.pop());
}
return stack1.pop();
}
剑指offer1-5
猜你喜欢
转载自blog.csdn.net/qq_39448574/article/details/89481882
今日推荐
周排行