摘要:贪心算法的介绍和例子 什么是贪心算法? 贪心算法是一种寻找最优解的算法,它的基本思想是:在每一步选择中,都采取当前状态下最好或最优的选择,从而希望导致结果是最好或最优的算法。 贪心算法有以下特点: 只考虑当前状态,不考虑全局最优 不能回退,即一旦做出选择就不能改变 易于实现,运行效率高 不一定能得到
阅读全文
lotus贵有恒何必三更眠五更起 最无益只怕一日曝十日寒 |
|
04 2023 档案
摘要:贪心算法的介绍和例子 什么是贪心算法? 贪心算法是一种寻找最优解的算法,它的基本思想是:在每一步选择中,都采取当前状态下最好或最优的选择,从而希望导致结果是最好或最优的算法。 贪心算法有以下特点: 只考虑当前状态,不考虑全局最优 不能回退,即一旦做出选择就不能改变 易于实现,运行效率高 不一定能得到
阅读全文
摘要:1. 题目 读题 https://leetcode.cn/problems/maximum-subarray/ 考查点 这道题的考查点是: 贪心算法:贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。贪心算法在有最优子结构的问题中尤其有效
阅读全文
摘要:1. 题目 读题 https://leetcode.cn/problems/queue-reconstruction-by-height/ 考查点 这道题的考查点是贪心算法的应用,以及如何根据题目的要求设计合适的排序规则和插入策略。 贪心算法是一种常见的解决优化问题的方法, 它需要我们证明每次选择最
阅读全文
摘要:1. 题目 读题 https://leetcode.cn/problems/task-scheduler/ 考查点 这道题的考查点是: - 如何统计和排序任务的频率。- 如何分析不同情况下的最少时间。- 如何利用数学公式来简化计算。 2. 解法 思路 解法的思路是: 首先统计每种任务的出现频率,然后
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/subsets/ 考察点: 2. 解法 解法有三种 Leetcode 78是一个关于子集合的问题,给定一个不重复的整数数组nums,返回所有可能的子集(幂集)。 有多种方法可以用Java实现,比如: 使用迭代法,每次遍历数组中的一
阅读全文
摘要:1. 题目 考察点 这道题的考察点是回溯法(backtracking)的应用。回溯法是一种常用的算法思想,它可以解决很多和搜索、组合、排列、子集、路径等相关的问题。回溯法的核心是递归和剪枝,递归是为了遍历所有可能的选择,剪枝是为了减少无效的选择,提高效率。回溯法需要掌握以下几个要点: 如何定义状态空
阅读全文
摘要:1. 题目 读题 https://leetcode.cn/problems/jump-game/ 考查点 这道题主要考查的是贪心算法的应用, 即在每一步选择最优的局部解,从而达到全局最优的目的。 贪心算法通常用于解决一些最优化问题,如最小生成树、单源最短路径、任务调度等。 2. 解法 思路 一个可能
阅读全文
摘要:回溯算法 定义 回溯算法是一种搜索问题的解的方法,它可以找出所有可能的解,或者找出最优的解。 思想 回溯算法的思想是,从一个初始状态开始,每次尝试一个可能的选择,然后递归地继续搜索下一步。如果发现当前的选择不能达到目标或者不满足条件,就回退到上一步,换一个选择继续尝试。这种不断前进和后退的过程就叫做
阅读全文
摘要:1. 题目 读题 https://leetcode.cn/problems/generate-parentheses/ 这道题的题目描述是这样的: 给定一个整数n,表示括号对的数量,写一个函数来生成所有可能的有效括号组合。¹ 有效括号组合的意思是,每个左括号都有一个对应的右括号,并且括号之间的嵌套关
阅读全文
摘要:1. 题目 读题 https://leetcode.cn/problems/combination-sum/ 你好,这是Bing。根据搜索结果,leetcode 39是一个编程题目,要求你找出一个整数数组中所有可以使数字和为目标数的不同组合¹²。 例如,如果数组是[2,3,6,7],目标数是7, 那
阅读全文
摘要:1. 题目 读题 https://leetcode.cn/problems/permutations/description/ LeetCode 46题是一个**全排列**问题,给定一个不含重复数字的数组 nums ,返回其 **所有可能的全排列**。你可以 **按任意顺序** 返回答案。¹³ 例如
阅读全文
摘要:1. 题目 考查点 对回溯算法的理解和应用,以及你对字符串或者数组的操作和遍历。你需要掌握回溯算法的基本框架和思想,以及如何用代码实现回溯的过程。你还需要注意一些细节,比如如何避免重复的排列,如何恢复原来的状态,如何优化时间和空间复杂度等。 2. 解法 思路 这道题的思路是用**回溯**算法来求解。
阅读全文
摘要:1. 题目 读题 https://leetcode.cn/problems/permutations-ii/submissions/428949841/ 考查点 这道题的考查点主要有以下几个: - **回溯法**:回溯法是一种搜索所有可能解的方法,它的基本思想是从一个初始状态开始,每次尝试一个可能的
阅读全文
摘要:1. 题目 2. 解法 思路 这道题的考点是字符串的处理和分割,以及整数的比较。解题思路是: 首先,将两个版本号按照"."分割成字符串数组,这样就可以得到每个修订号的字符串表示。 然后,遍历两个数组,比较每个位置上的修订号。为了方便比较,可以将字符串转换成整数,这样就可以忽略前导零的影响。 如果某个
阅读全文
摘要:1. 题目 题目 https://leetcode.cn/problems/minimum-window-substring/ 这道题目是要求给定两个字符串s和t,找出s中包含t中所有字符的最小子串,如果不存在这样的子串,就返回空字符串。 例如,输入s = "ADOBECODEBANC", t =
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/longest-palindromic-substring/description/ 2. 解法 总有三种解法 动态规划、中心扩展和马拉车算法这三种解法。根据网上的资料,我总结了以下几点: 动态规划的思路是用一个二维数组 dp[i
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/string-to-integer-atoi/submissions/428764685/ LeetCode 8 是一道字符串转换整数的题目, 考查的是如何处理各种边界情况和异常输入,比如空格、正负号、非数字字符、溢出等 2. 解
阅读全文
摘要:1. 题目 题目 考查点 这个算法题的考查点是: 字符串的处理,如去除空格,分割单词,拼接字符串等。 双指针的使用,如左右指针,单词边界指针等。 字符串的反转,如整体反转,局部反转等。 2. 解法 思路 这个代码的思路是先去除字符串首尾的空格,然后反转整个字符串,再反转每个单词。这样就可以实现将每个
阅读全文
摘要:1. 题目 2. 解法 3. 总结
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array/ 考察点: 这道题的考察点是二分搜索的应用,你需要掌握如何在旋转排序数组中找到最小值,以及如何判断数组是否旋转过。你还需要注意时间复杂度要求是O(log n
阅读全文
摘要:1. 题目 2. 解法 思路:滑动窗口来遍历字符串 大致如下: 定义一个哈希集合和两个指针,分别表示窗口内的字符和窗口的左右边界。 定义一个变量,表示窗口的最大长度,也就是答案。 从左到右遍历字符串,每次移动右指针,把它指向的字符加入到哈希集合中。 如果哈希集合中已经存在这个字符,说明有重复,那么就
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/ 考察点 这道题主要考察的是数组和二分查找的知识点。😊 数组是一种基本的数据结构,可以用来存储多个相同类型的数据,可
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/search-in-rotated-sorted-array/ 考察点 这道题的考察点是二分查找的应用。二分查找是一种在有序数组中查找目标值的高效算法,它的时间复杂度是O(log n)。二分查找的基本思想是,每次比较中间元素和目标
阅读全文
摘要:1. 题目 2. 解法 解答思路 求一棵二叉树的直径,也就是树中任意两个节点之间的最长路径的长度。这条路径可能经过或不经过根节点。路径的长度用边的数量来表示。 解题思路是使用递归函数,对于每个节点,计算它的左子树和右子树的高度, 然后更新一个全局变量 max,使其为 max 和左右子树高度之和的较大
阅读全文
摘要:1. 总结 本期主要讲了 栈和树 两种结构 ,关键字:递归
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/path-sum-iii/ 考察点 这道题的考察点是: 二叉树的遍历,如何使用深度优先搜索或广度优先搜索来访问每个节点。 前缀和的概念,如何利用前缀和来快速计算路径和,以及如何处理负数的情况。 哈希表的使用,如何利用哈希表来存储和
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/delete-node-in-a-bst/ 考察点 这道题的考察点主要是以下几个方面: 二叉搜索树的性质和操作,如何在二叉搜索树中查找、插入和删除节点,以及如何找到节点的后继(或者前驱)。 递归的思想和技巧,如何设计递归函数的参数
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/convert-bst-to-greater-tree/ 考察点 总结一下这个题目的要点: 题目给定一个二叉搜索树,要求把它转换成累加树,即每个节点的值是原来的值加上所有大于它的值之和。 为了实现这个转换,我们需要按照节点值降序遍
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/binary-tree-maximum-path-sum/description/ 路径是指从树中任意节点出发,到达任意节点的序列,不一定经过根节点。路径和是指路径上所有节点的值的和。要求返回任意非空二叉树的最大路径和。 考察点
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/basic-calculator/ 2. 解法 解题思路: 使用两个栈,一个存储数字,一个存储运算符 遍历字符串,如果遇到数字,就将其转换为整数并压入数字栈 如果遇到运算符,就比较其与运算符栈顶的优先级,如果高于或等于栈顶的优先级
阅读全文
摘要:1. 题目 2. 解法 当我们需要对一棵树进行层序遍历时,我们可以使用队列来记录遍历过程。具体实现步骤如下: 首先将根节点入队。 当队列不为空时,取出队首元素,将其值存入结果列表中。 如果该节点有左子节点,则将其左子节点入队。 如果该节点有右子节点,则将其右子节点入队。 重复步骤2-4,直到队列为空
阅读全文
摘要:1. 题目 2. 解法 当我们遍历一棵二叉树时,我们可以按照层序遍历的方式,从上到下、从左到右地遍历每个节点。 而锯齿形层序遍历则是在层序遍历的基础上, 增加了一个规则:对于每一层,如果当前层是从左到右遍历的,则下一层就从右到左遍历;如果当前层是从右到左遍历的,则下一层就从左到右遍历。 这样,我们就
阅读全文
摘要:1. 题目 2. 解法 什么是二叉树的右视图 二叉树的右视图是指从二叉树的右侧看,能够看到的节点的值的序列 例如,给定一个二叉树: 1 / \ 2 3 \ \ 5 4 从右侧看,能够看到的节点的值是 [1, 3, 4],这就是二叉树的右视图。 一种求解二叉树的右视图的方法是使用层序遍历,每次记录每一
阅读全文
摘要:1. 题目 2. 解法 解题思路 我们要找到两个指定节点的最近公共祖先,也就是说,我们要找到一个节点,它是两个指定节点的祖先,而且它的深度尽可能大。 为了找到这样的节点,我们可以从根节点开始,递归地遍历二叉树,判断每个节点是否满足这个条件。 如果一个节点满足这个条件,那么它必须同时满足以下两个子条件
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/validate-binary-search-tree/ 考察点 这道题的考察点是: 对二叉搜索树的定义和性质的理解和掌握。 对递归和迭代的思想和实现的熟练度。 对中序遍历的原理和应用的掌握。 对边界值和特殊情况的处理能力。 2.
阅读全文
摘要:1. 题目 考察点 考察点是二叉树的遍历和构造,以及分治法的应用 二叉树的遍历有前序遍历,中序遍历和后序遍历三种方式,它们的区别在于根节点的访问顺序。前序遍历是先访问根节点,再访问左子树,最后访问右子树。中序遍历是先访问左子树,再访问根节点,最后访问右子树。后序遍历是先访问左子树,再访问右子树,最后
阅读全文
摘要:1. 题目 考察点 这道题的考察点是二叉树的遍历和展平, 需要掌握前序遍历,中序遍历和后序遍历的顺序和方法,以及如何将二叉树转换为链表的技巧。 这道题可以用递归,迭代或者原地修改的方式来解决,需要注意展平后的链表要保持和二叉树的前序遍历相同的顺序。 这道题也可以扩展为按照中序遍历或者后序遍历的顺序来
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/implement-trie-prefix-tree/ 2. 解法 什么是 Trie (前缀树)? Trie (前缀树) 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。 它的每个节点都包含一个长度为 26 的数组,用
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/daily-temperatures/ 2. 解法 单调栈 单调栈是一种满足单调性的栈结构,也就是说,栈中的元素按照它们在栈内的位置,要么递增,要么递减。 单调栈可以在O(n)的时间复杂度内解决一些找到下一个更大或更小元素的问题,
阅读全文
摘要:1. 题目 2. 解法 有两种常见的方法: 一种是使用数组和滑动窗口, 另一种是使用单调栈。 数组和滑动窗口 思路 使用数组和滑动窗口的方法的思路是: 对于每个元素,如果我们知道它左右两边第一个比它小的元素的下标,那么我们就可以计算出以它为高度的最大矩形的宽度,即右边界减去左边界再减一。 为了找到每
阅读全文
摘要:1. 题目 考察点 这道题的考察点是: 链表的基本操作,如遍历,插入,删除等。 链表的反转技巧,如头插法,递归法等。 边界条件的处理,如空链表,k 为 1,k 大于链表长度等 2. 解法 思路 这段代码的思路是: 使用一个虚拟节点 dummy 来简化代码,让它指向头节点。 使用三个指针 prev,c
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/lru-cache/ 2. 解法 解题思路是 使用一个双向链表和一个哈希表来实现一个LRU缓存机制。 双向链表用来存储最常使用的键值对,最近使用的元素放在链表的表头,链表中最后一个元素是使用频率最低的元素。 哈希表用来记录对应的<
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/reorder-list/ 考察点 这道题的考察点是链表的操作,包括找到链表的中点,反转链表,合并链表等。这些操作都是链表的基本技巧,需要熟练掌握 这道题也可以看作是一个数学问题,就是如何把一个序列重新排列成另一个序列,满足一定的
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/merge-k-sorted-lists/ 考察点 Leetcode 23 是一个关于合并 k 个有序链表的问题。它考察的是排序、分治和合并排序的知识。 你需要使用一个优先队列或者一个最小堆来维护 k 个链表的当前最小元素, 然后
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/reverse-linked-list-ii/ 2. 解法 思路是: 首先,创建一个哑节点作为链表的头部,这样可以避免处理边界情况,比如left等于1的时候。 然后,创建一个前驱节点,初始化为哑节点,用来记录反转区间的前一个节点。
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 2. 解法 这道题的目标是删除链表中倒数第n个节点,例如,给定链表1->2->3->4->5和n=2,要求删除倒数第二个节点,即4,返回1->2->3->5。 这
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/add-two-numbers/ 2. 解法 解答思路。 为了解决这个问题,我们需要模拟两数相加的过程,从低位到高位,逐位相加,并考虑进位的情况。我们可以使用以下的步骤: 创建一个虚拟头节点,它不存储任何值,只是为了方便返回结果链
阅读全文
摘要:1. 题目 考察点 这道题的考察点是数组,排序,堆和快速选择算法。 你需要知道如何对数组进行排序,以及不同的排序算法的时间和空间复杂度。 你需要知道如何使用堆来维护一个有序的集合,以及如何利用堆的性质来快速找到第k个最大的元素。 你需要知道如何使用快速选择算法来在平均O(n)的时间内找到第k个最大的
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/top-k-frequent-elements/ 考察点 这道题的考察点是: 如何使用哈希表来统计元素的出现频率。 如何使用最小堆来找出前k个高频元素。 如何利用堆的性质来优化时间复杂度。 如何使用合适的数据结构来存储和返回结果。
阅读全文
摘要:1. 题目 2. 解法 3. 总结
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/jump-game/ 考察点 这道题的考察点是数组和动态规划。 数组是一种基本的数据结构,需要掌握如何遍历、访问和修改数组中的元素。 动态规划是一种常用的算法思想,需要掌握如何找到问题的最优子结构、状态转移方程和边界条件。 这道题
阅读全文
摘要:1. 题目 2. 解法 3. 总结
阅读全文
摘要:1. 题目 2. 解法 3. 总结
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/rotate-image/ 2. 解法 3. 总结
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/3sum/ 2. 解法 思路是这样的: 首先,对数组进行排序,这样可以方便地跳过重复的元素,也可以利用双指针法来寻找第二个数和第三个数。 然后,遍历数组,固定第一个数,如果第一个数大于零,那么后面的数都大于零,不可能有解,所以可以
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/container-with-most-water/description/ 2. 解法 思路 使用双指针法, 从数组的两端向中间移动,每次计算当前的容积,并更新最大值, 然后移动较矮的一端,直到两个指针相遇。 为什么要移动较矮的
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/majority-element/ 169. 多数元素 考察点 数组和哈希表的基本操作, 以及如何在线性时间和常数空间内找到数组中的多数元素。 多数元素是指在数组中出现次数大于⌊n/2⌋的元素 2. 解法 解法一:摩尔投票法 理论
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/implement-rand10-using-rand7/submissions/425373186/ 2. 解法 思路 这道题的要求是用rand7()函数来生成1到10之间的均匀随机数。 一种可能的解法是使用拒绝采样的方法, 即
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ 121. 买卖股票的最佳时机 2. 解法 2.1 解法一:动态规划 2.2 解法二:非动态规划 思路 这道题的目标是给定一个数组,它的第 i 个元素是一支给定股票第
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/maximum-subarray/ 53. 最大子数组和 2. 解法 2.1 解法一:借助dp数组 public static int maxSubArray(int[] nums) { int[] dp = new int[nu
阅读全文
摘要:1. 题目 运态规划的定义 动态规划的解题步骤 2. 解法 2.1 递归 public static int fibonacci(int n) { if (n == 0) { return 0; } if (n == 1) { return 1; } return fibonacci(n - 1)
阅读全文
摘要:什么是时间回拨问题 雪花算法通过时间来即将作为id的区分标准之一,对于同一台id生成机器,它通过时间和序号保证id不重复 当机器出现问题,时间可能回到之前,此时,时间就不能区分 又或者因为闰秒的出现,导致时间回拨 如何解决 方法1 直接抛出异常 不管3X7==21,直接抛出异常 将问题交给人工解决
阅读全文
摘要:📣读完这篇文章里你能收获到 图文形式为你讲解原生雪花算法的特征及原理 了解时间回拨的概念以及可能引起发此现象的操作 掌握时间回拨的解决方案—基于时钟序列的雪花算法 关于雪花算法的常见问题解答 文章目录 一、原生的雪花算法 1. 简介 2. 特征 3. 原理 3.1 格式(64bit) 3.2 字节
阅读全文
摘要:对id的要求 业务 全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。 信息安全:如果ID是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定URL即可;如果是订单号就更危险了,竞对可以直接知道我们一天的单量。所以在一些应用场景下,会需要ID无规则、不规则。 可读性 技
阅读全文
摘要:Butterfly 简介 雪花算法是 twitter 提出的分布式 id 生成器方案,但是有三个问题,其中前两个问题在业内很常见: 时间回拨问题 机器 id 的分配和回收问题 机器 id 的上限问题 Butterfly(蝴蝶)是一个超高性能的发号器框架。起名 Butterfly 是用世界上没有完全相
阅读全文
摘要:目录 一、概要 1.1 mysql复制的优点 1.2 Mysql复制解决的问题 二、MySQL 主从复制的概念 三、MySQL 主从复制的主要用途 3.1 读写分离 3.2 数据实时备份,当系统中某个节点发生故障时,可以方便的故障切换(主从切换) 3.3 高可用(HA) 3.4 架构扩展 四、MyS
阅读全文
摘要:知识点总结: 1. MySQL主从同步实现方式 MySQL主从同步是基于Bin Log实现的,而Bin Log记录的是原始SQL语句。 Bin Log共有三种日志格式,可以binlog_format配置参数指定。 参数值含义 Statement 记录原始SQL语句,会导致更新时间与原库不一致。比如
阅读全文
摘要:先看下目录: 1 说说MySQL 的基础架构图 2 一条SQL查询语句在MySQL中如何执行的? 3 日常工作中你是怎么优化SQL的? 4 怎么看执行计划(explain),如何理解其中各个字段的含义? 5 关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询都怎么优化过? 6 聚集索引与非聚
阅读全文
摘要:0. 正文 从这篇「执行一条 SQL 查询语句,期间发生了什么?」中,我们知道了一条查询语句经历的过程,这属于「读」一条记录的过程,如下图: 查询语句执行流程 那么,执行一条 update 语句,期间发生了什么?,比如这一条 update 语句: UPDATE t_user SET name = '
阅读全文
摘要:1. undolog 1.1 undolog – 原子性 1.2 回滚日志,记录数据被修改前的信息,属于逻辑日志 什么是逻辑日志? 比如我们执行一条delete语句,undolog里边记录的是相反的操作insert记录【相当于存放的是操作逻辑语句,而不是数据】 逻辑日志好处 比如全表更新,如果是物理
阅读全文
摘要:MySQL几乎成为互联网行业使用的最多的开源关系型数据库,正因如此,MySQL也成为各大互联网公司面试中必问的数据库,尤其是MySQL中的事务实现机制和三大核心日志的实现原理。 今天,我们就重点聊聊MySQL三大核心日志的实现原理。 1. MySQL日志 说起MySQL的日志,有三种类型的日志对于M
阅读全文
摘要:输出一个二叉树的宽度 思路:二叉树的层序遍历(力扣102)的简单变形,记录下每层的节点个数,取最大值即可。 二叉树的层序遍历--打印 public static void level(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(
阅读全文
摘要:概述 单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,使用单例模式的类只有一个对象实例。 单例应用场景 Windows系统的任务管理器。Windows系统的回收站。操作系统的文件系统,一个操作系统只能有一个文件系统。数据库连接池的设计与实
阅读全文
摘要:1. 动态规划的思想 动态规划的思想是通过把原问题分解成相对简单的子问题的方式来解决复杂问题的方法。 2. 适应场景 动态规划适用于具有最优子结构和重叠子问题的问题。 最优子结构是指问题的最优解可以由子问题的最优解推导得到,重叠子问题是指不同的子问题可能包含相同的更小的子问题。 3. 动态规划的一般
阅读全文
摘要:1.题目 这道题的考察点 是你对Java中位移运算符的理解和应用。 你需要知道左移、右移和无符号右移的区别,以及它们在二进制数上的效果。 你还需要注意负数的表示和处理,以及溢出的可能性。 2.解法 思路 这道题的目标是计算两个整数之间的汉明距离,也就是它们对应二进制位不同的个数。一个简单的方法是使用
阅读全文
摘要:1.题目 https://leetcode.cn/problems/valid-parentheses/ 2.解法 2.1 解法一:利用栈 思路 是使用一个栈来存储左括号,然后遍历字符串中的每个字符, 如果是左括号就入栈, 如果是右括号就出栈并和栈顶元素比较是否匹配。 如果不匹配或者栈为空,就说明字
阅读全文
摘要:1.题目 https://leetcode.cn/problems/add-strings/ 2.解法 思路 使用双指针从后往前遍历两个字符串,同时用一个变量 carry 来记录进位。每次计算两个字符的和,加上 carry ,然后将结果的个位数放入一个 StringBuilder 中,将结果的十位数
阅读全文
摘要:1.题目 https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/ leetcode 28 字符串匹配之BF(Brute Force)算法是一种简单的字符串匹配算法,也叫暴力匹配算法。它的思想是将
阅读全文
摘要:1.题目 2.解法 3.总结
阅读全文
摘要:1.题目 https://leetcode.cn/problems/counting-bits/ 2.解法 2.1 解法一:动态规划+ 位运算 其中一种解法是使用位运算,利用i和i&(i-1)的关系来计算1的个数。 具体来说,可以观察到i&(i-1)是将i的最低位的1变成0的结果,所以i和i&(i-
阅读全文
摘要:1.题目 2.解法 3.总结
阅读全文
摘要:1. 常见场景 2 具体详情 2.1 取模 2.1.1 位运算可以处理取模的原理 取模运算(%)是求一个数除以另一个数的余数,比如7 % 3 = 1,表示7除以3余1。取模运算在一些场景中很有用,比如判断一个数是否是奇数或偶数,或者将一个大数映射到一个小范围内。 位运算(&)是按位与运算,即对两个数
阅读全文
摘要:1.题目 https://leetcode.cn/problems/single-number/ 考察点 位运算,即对二进制数进行的运算,比如与、或、非、异或等。 异或运算,即按位比较两个数,如果不同则为1,相同则为0。异或运算的符号是^。 异或运算的性质和应用,比如:任何数和0异或,结果还是原来的
阅读全文
摘要:1. 位运算的定义 Java位运算是对操作数的二进制位进行运算,操作数和计算结果都是整型。Java位运算有以下几种类型:&与,|或,^异或,~取反,<<左移,>>右移,>>>无符号右移。 2.Java位运算的场景 Java位运算的场景有很多,比如: 判断奇偶数:a & 1 == 0 表示a是偶数,a
阅读全文
摘要:1.题目 2.解法 3.总结
阅读全文
摘要:1.题目 2.解法 3.总结
阅读全文
摘要:1.题目 2.解法 选择排序是一种简单而有效的排序算法, 它的工作原理是:每次从未排序的列表中选择最小(或最大)的元素,将它放到已排序的列表的开头。这个过程重复进行,直到整个列表都排好序。 选择排序的算法思想如下: 将第一个元素设为最小值(min_idx)。从第二个元素开始,依次和最小值比较,如果比
阅读全文
摘要:1.题目 2.解法 冒泡排序的算法思想是这样的: 比较相邻的两个元素,如果第一个比第二个大(或小),就交换它们的位置;对每一对相邻的元素重复这个操作,直到遍历完整个数组,这样最大(或最小)的元素就被移动到了数组的末尾;除了最后一个元素,对剩余的元素重复上述步骤,直到数组完全有序。冒泡排序的名字来源于
阅读全文
摘要:1.题目 2.解法 插入排序的算法思路是这样的: 将数组的第一个元素看作是已排序的序列,从第二个元素开始,依次往已排序的序列中插入。每次插入时,从已排序的序列的末尾开始比较, 如果待插入的元素小于当前比较的元素,则将当前元素后移一位, 否则将待插入的元素放在当前位置。 重复上述步骤,直到所有的元素都
阅读全文
摘要:1.题目 2.解法 快速排序的算法思想是: 通过一趟排序将待排序序列分割成两个子序列,其中一个子序列的元素都比另一个子序列的元素小。然后对两个子序列分别进行快速排序,直到所有元素都有序。快速排序的关键是选择一个合适的基准元素,将其放在正确的位置,并以此划分子序列。选择基准元素的方法有多种,如固定位置
阅读全文
摘要:MySQL 加行级锁的规则终于被我说清楚了!-mysql行级锁原理 (51cto.com) 目录 1. 什么 SQL 语句会加行级锁? InnoDB 引擎是支持行级锁的,而 MyISAM 引擎并不支持行级锁,所以后面的内容都是基于 InnoDB 引擎 的。 普通的 select 语句是不会对记录加锁
阅读全文
摘要:双亲委派机制以及如何打破什么是双亲委派机制工作原理Java类加载器双亲委派机制举例沙箱机制双亲委派机制的优势为什么要打破双亲委派机制? Tomcat为什么要打破双亲委派机制 Tomcat使用Java默认加载器的问题 Tomcat的类加载机制 工作原理 Tomcat应用的默认加载顺序 Tomcat类加
阅读全文
摘要:一、wait()和notify()含义 二、标准代码示例 创建两个线程Thread0和Thread1。 代码实现: 运行流程详解 三、什么时候释放锁—wait()、notify() 四、用生活故事讲懂线程的等待唤醒 1.老王和老李(专家程序员): 2.王哥和李哥(普通程序员): 3.小王和小李(新手
阅读全文
摘要:红黑树在Java中的应用 红黑树在Java中有很多应用。例如, Java 8中的HashMap容器和TreeMap容器都有红黑树的具体应用。HashMap在插入和查找时都需要对键进行哈希,而TreeMap则是按照键的自然顺序进行排序。 因此,当需要对键进行排序时,可以使用TreeMap; 当不需要排
阅读全文
|