![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
陈皮tang
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 68 - II. 二叉树的最近公共祖先
class Solution { /** * 二叉树的最近公共祖先 * 思路: * 三种情况: * 1、p q 一个在左子树 一个在右子树 那么当前节点即是最近公共祖先 * 2、p q 都在左子树 * 3、p q 都在右子树 * @param root * @param p * @param q * @return */ public TreeNode...原创 2021-11-24 11:35:31 · 342 阅读 · 0 评论 -
剑指 Offer 67. 把字符串转换成整数
class Solution { public int strToInt(String str) { List<Character> list = new ArrayList<>(); boolean flag = true;//1 + 0 - boolean start = false;//截取已经开始 for(int i=0;i<str.length();i++){ ...原创 2021-11-24 10:49:04 · 120 阅读 · 0 评论 -
最长和谐子序列
class Solution { public int findLHS(int[] nums) { Arrays.sort(nums); int begin = 0; int res = 0; for (int end = 0; end < nums.length; end++) { while (nums[end] - nums[begin] > 1) { ...原创 2021-11-20 10:58:13 · 211 阅读 · 0 评论 -
面试题50. 第一个只出现一次的字符(哈希表 / 有序哈希表,清晰图解)
class Solution { public char firstUniqChar(String s) { Map<Character, Boolean> dic = new LinkedHashMap<>(); char[] sc = s.toCharArray(); for(char c : sc) dic.put(c, !dic.containsKey(c)); for...原创 2021-11-18 11:44:21 · 244 阅读 · 0 评论 -
剑指 Offer 49. 丑数
方法一:最小堆初始化一个空堆,先将最小丑数1放入优先队列(堆顶元素最小),取出堆顶元素x(最小),将2x,3x,5x压入堆,使用set进行去重操作,2x,3x,5x在set中不存在时,将值压入priorityQueue,和set,第n次取的是第n个丑数。class Solution { public int nthUglyNumber(int n) { PriorityQueue<Long> heap = new PriorityQueue<Long>原创 2021-11-18 10:24:47 · 58 阅读 · 0 评论 -
剑指 Offer 38. 字符串的排列(回溯法,清晰图解)Krahets发布于 2020-03-30192.3k
class Solution { List<String> res = new LinkedList<>(); char[] c; public String[] permutation(String s) { c = s.toCharArray(); dfs(0); return res.toArray(new String[res.size()]); } void df...原创 2021-11-17 15:04:43 · 143 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表(中序遍历,清晰图解)
class Solution { private Node head ; private Node pre ; public Node treeToDoublyList(Node root) { if(root==null) return null; pre = null; dfs(root); head.left = pre; pre.right = head; ...原创 2021-11-14 17:27:58 · 208 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制(哈希表 / 拼接与拆分,清晰图解)
class Solution {public: Node* copyRandomList(Node* head) { Node* cur = head; Node* dum = new Node(0), *pre = dum; while(cur != nullptr) { Node* node = new Node(cur->val); // 复制节点 cur pre->...原创 2021-11-13 12:03:07 · 292 阅读 · 0 评论 -
剑指 Offer 24. 反转链表(迭代 / 递归,清晰图解)
class Solution { public ListNode reverseList(ListNode head) { ListNode cur = head, pre = null; while(cur != null) { ListNode tmp = cur.next; // 暂存后继节点 cur.next cur.next = pre; // 修改 next 引用指向 ...原创 2021-11-07 16:55:53 · 78 阅读 · 0 评论 -
剑指 Offer 17. 打印从1到最大的n位数
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。class Solution { public int[] printNumbers(int n) { int MAX_VALUE = 0; for(int i=0;i<n;i++){ MAX_VALUE = MAX_VALUE*10+9; } int[] resu.原创 2021-11-06 15:02:48 · 54 阅读 · 0 评论 -
面试题14- II. 剪绳子 II(数学推导 / 贪心思想 + 快速幂求余,清晰图解)
力扣https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/solution/mian-shi-ti-14-ii-jian-sheng-zi-iitan-xin-er-fen-f/# 求 (x^a) % p —— 循环求余法def remainder(x, a, p): rem = 1 for _ in range(a): rem = (rem * x) % p return rem...转载 2021-11-06 10:50:48 · 87 阅读 · 0 评论 -
剑指 Offer II 004. 只出现一次的数字(有限状态自动机 + 位运算,清晰图解)
解题思路:如下图所示,考虑数字的二进制形式,对于出现三次的数字,各 二进制位 出现的次数都是 333 的倍数。因此,统计所有数字的各二进制位中 1 的出现次数,并对 3 求余,结果则为只出现一次的数字。方法一:有限状态自动机各二进制位的 位运算规则相同 ,因此只需考虑一位即可。如下图所示,对于所有数字中的某二进制位 1的个数,存在 3 种状态,即对 3 余数为 0,1,2。 若输入二进制位 1 ,则状态按照以下顺序转换; 若输入二进制位 0,则状态不变。...原创 2021-11-06 10:41:48 · 125 阅读 · 0 评论 -
剑指 Offer II 003. 前 n 个数字二进制中 1 的个数
class Solution { public int[] countBits(int n) { int[] bits = new int[n + 1]; for (int i = 0; i <= n; i++) { bits[i] = countOnes(i); } return bits; } public int countOnes(int x) { int...原创 2021-11-03 17:12:38 · 65 阅读 · 0 评论