【Notes12】剑指offer_03-20题
发布日期:2021-04-30 21:06:43
浏览次数:91
分类:精选文章
本文共 3235 字,大约阅读时间需要 10 分钟。
数组重复数字
问题描述:在数组中找出重复的数字。
解决思路:使用哈希集合来记录已出现的数字,遍历数组一旦发现重复的数字即可返回。
代码实现:
public int findRepeatNumber(int[] nums) { HashSet set = new HashSet<>(); int res = -1; for (int num : nums) { if (!set.add(num)) { res = num; break; } } return res;} 二维数组查找
问题描述:判断目标数字是否存在于二维数组中。
解决思路:采用类似二分查找的方法,从右上角开始,逐步排除行或列,直到找到目标或遍历完整个数组。
代码实现:
public boolean findNumberIn2DArray(int[][] array, int target) { if ((array == null || array.length == 0) || (array.length == 1 && array[0].length == 0)) { return false; } int i = 0, j = array[0].length - 1; while (i <= array.length - 1 && j >= 0) { if (array[i][j] == target) return true; if (array[i][j] > target) j--; else i++; } return false;} 替换空格
问题描述:将字符串中的空格替换为"%20"。
解决思路:遍历字符串,将每个空格替换为特定的字符序列。
代码实现:
public String replaceSpace(String s) { int n = s.length(); char[] array = new char[3 * n]; int size = 0; for (int i = 0; i < n; i++) { char c = s.charAt(i); if (c == ' ') { array[size++] = '%'; array[size++] = '2'; array[size++] = '0'; } else { array[size++] = c; } } return new String(array, 0, size);} 链表反转打印
问题描述:从尾到头打印链表节点的值。
解决思路:使用栈来辅助反转链表,然后将节点值依次弹出栈,存入结果数组。
代码实现:
public int[] reversePrint(ListNode head) { Stack stk = new Stack<>(); ListNode temp = head; while (temp != null) { stk.push(temp); temp = temp.next; } int n = stk.size(); int[] res = new int[n]; for (int i = 0; i < n; i++) { res[i] = stk.pop().val; } return res;} 二叉树重建
问题描述:根据前序和中序遍历序列重建二叉树。
解决思路:使用递归的深度优先搜索(DFS)方法,记录前序遍历的索引和中序遍历的索引,逐步构建树。
代码实现:
public TreeNode buildTree(int[] preorder, int[] inorder) { return dfs(preorder, inorder, null);}private TreeNode dfs(int[] preorder, int[] inorder, TreeNode finish) { if (preindex == preorder.length || (finish != null && inorder[inindex] == finish.val)) { return null; } TreeNode root = new TreeNode(preorder[preindex++]); root.left = dfs(preorder, inorder, root); inindex++; root.right = dfs(preorder, inorder, finish); return root;} 下一个节点查找
问题描述:在二叉树中找到某个节点的下一个节点。
解决思路:沿着右子树走,直到找到一个有左子树的节点,或者回到父节点继续查找。
代码实现:
public TreeNode inorderSuccessor(TreeNode p) { if (p.right != null) { p = p.right; while (p.left != null) { p = p.left; } return p; } while (p.father != null) { if (p == p.father.left) { return p.father; } p = p.father; } return null;} 队列实现
问题描述:用两个栈实现队列。
解决思路:利用两个栈来模拟队列的先进先出的特性,将元素从一个栈转移到另一个栈中。
代码实现:
public class CQueue { Stack stk1, stk2; int size; public CQueue() { stk1 = new Stack<>(); stk2 = new Stack<>(); size = 0; } public void appendTail(int value) { while (!stk1.isEmpty()) { stk2.push(stk1.pop()); } stk1.push(value); while (!stk2.isEmpty()) { stk1.push(stk2.pop()); } size++; } public int deleteHead() { if (size == 0) return -1; int res = stk1.pop(); size--; return res; }} 剩余题目(其他问题请根据上述格式补充)
...
以上代码均为简化版,具体实现细节可根据实际需求进一步优化。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2026年06月01日 00时30分31秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
php的一些小笔记--字符串
2023-03-01
php的几种运行模式CLI、CGI、FastCGI、mod_php
2023-03-01
php的四大特性八大优势
2023-03-01
RabbitMQ
2023-03-01
PHP的威胁函数与PHP代码审计实战
2023-03-01
PHP的引用举例
2023-03-01
PHP相关代码
2023-03-01
RabbitMQ
2023-03-01
php知识点记录
2023-03-01
PHP第三方登录—OAuth2.0协议
2023-03-01
php筛选js,php如何多条件筛选js代码
2023-03-01
R730服务器做了raid的硬盘,插在R720上面可以用吗?
2023-03-01
PHP类数组式访问(ArrayAccess接口)
2023-03-01
PHP系列:浅谈PHP中isset()和empty() 函数的区别
2023-03-01
PHP索引数组unset的坑-array_values解决方案
2023-03-01
PHP索引数组排序方法整理(冒泡、选择、插入、快速)
2023-03-01
PHP线程安全和非线程安全
2023-03-01
R3LIVE开源项目常见问题解决方案
2023-03-01
php缃戠珯,www.wfzwz.com
2023-03-01