《剑指Offer》2.3数据结构 java版
来源:互联网 发布:list转json后的格式 编辑:程序博客网 时间:2024/06/06 04:26
No.3 二维数组中查找数字
思路:从右上角(左下角)开始比较
public boolean Find(int target, int [][] array) { if(array == null) return false; int row = array.length, column = array[0].length; int i = 0, j = column - 1; while( i < row && j >= 0){ if(array[i][j] == target) return true; if(array[i][j] > target) j--; else i++; } return false; }
No.4:将字符串中的空格替换为”%20“
思路:第一种:可以新开辟空间存储;第二种,在原字符串上修改,从后往前
public String replaceSpace(StringBuffer str) { if(str == null || str.length() == 0) return str.toString(); int len = str.length(); StringBuilder sb = new StringBuilder(); for(int i = 0; i < len; i++){ if(str.charAt(i) == ' '){ sb.append("%20"); }else{ sb.append(str.charAt(i)); } } return sb.toString(); }
推广:将两个数组按序合并,在原位置
public int[] mergerDigital(int[] A,int[] B, int n1, int n2){ if(n2 == 0) return A; if(n1 == 0){ A = Arrays.copyOf(B, n2); return A; } int k = n1 + n2 - 1, i = n1 - 1, j = n2 - 1; while(i >= 0 && j >= 0){ A[k--] = A[i] >= B[j] ? A[i--] : B[j--]; } while(i >= 0){ A[k--] = A[i--]; } while(j >= 0){ A[k--] = B[j--]; } return A; }
No.5 将单向链表逆序输出
思路:使用栈,后进先出;或者使用linkedlist
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { Stack s = new Stack(); while(listNode != null){ s.push(listNode.val); listNode = listNode.next; } ArrayList al = new ArrayList(); while(!s.empty()){ al.add(s.pop()); } return al; }
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { LinkedList s = new LinkedList(); while(listNode != null){ s.addFirst(listNode.val); listNode = listNode.next; } return new ArrayList<>(s); }
No.6 重建二叉树
思路:递归思想
public TreeNode help(int[] preorder, int[] inorder, int pleft, int pright, int ileft, int iright) { if(pleft > pright || ileft > iright) return null; TreeNode root = new TreeNode(preorder[pleft]); int i; for(i = ileft; i <= iright; i++){ if(inorder[i] == preorder[pleft]) break; } root.left = help(preorder, inorder,pleft + 1, pleft + i - ileft, ileft, i - 1); root.right = help(preorder, inorder,pleft + i - ileft + 1, pright, i + 1, iright); return root; } public TreeNode reConstructBinaryTree(int [] pre,int [] in) { int len = pre.length; if(len == 0) return null; return help(pre, in, 0, len - 1, 0, len - 1); }
No.7 用两个栈实现一个队列
Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.push(node); } public int pop() throws Exception { if(stack2.isEmpty()){ while(!stack1.isEmpty()){ stack2.push(stack1.pop()); } } if(stack2.isEmpty()) throw new Exception("队列为空,不能删除"); return stack2.pop(); }
1 0
- 《剑指Offer》2.3数据结构 java版
- 剑指offer 2.3 数据结构3-字符串
- 剑指offer之数据结构
- 剑指offer 数据结构与算法 二维数组查找 java 实现
- 剑指offer(数据结构篇)
- 剑指offer(java版)
- 剑指Offer Java版 链表
- 剑指offer(java版)
- 剑指offer(java版)
- 剑指Offer(java版)
- 剑指offer 2.3 数据结构1-数组求sizeof()
- 剑指offer 2.3 数据结构2-二维数组中的查找
- 剑指offer 2.3 数据结构4-替换字符串中的空格
- 数组与指针(剑指offer数据结构部分)
- 剑指offer-数据结构:字符串(基础知识)
- 剑指offer第19题java版
- 正则表达式匹配-剑指offer(JAVA版)
- 【剑指offer-Java版】04替换空格
- linux 不同压缩
- c++上机报告
- 广播实验
- C++上机实验1-项目4
- JQuery easyUI datagrid 排序,使用sorter自定义排序
- 《剑指Offer》2.3数据结构 java版
- html dom
- UCOS-II之字节对齐问题 sprintf
- 替换空格
- 统计出其中英文字母、数字、空格和其他字符的个数
- c++第一次实验-4模拟ATM
- Android存储方式之内部存储
- [UWP]附加属性2:实现一个Canvas
- 常用对象操作:除了一般windows窗口的常用功能键外。