怒刷LeetCode的第7天(Java版)

目录

第一题

题目来源

题目内容

解决方法

方法一:二分+贪心

 方法二:二分+DP

第二题

题目来源

题目内容

解决方法

方法一:双指针

方法二:暴力搜索

方法三:排序

第三题

题目来源

题目内容

解决方法

方法一:回溯算法

方法二:队列

方法三:递归

方法四:迭代


第一题

题目来源

2560. 打家劫舍 IV - 力扣(LeetCode)

题目内容

解决方法

方法一:二分+贪心

根据题目描述,我们可以使用二分查找和贪心思路来解决这个问题。

首先,我们定义一个函数check用于判断给定的窃取能力是否满足条件。在该函数中,我们使用贪心策略。我们遍历房屋金额数组nums,对于每个房屋,如果其金额小于等于给定的窃取能力,我们将计数器count加1,并且跳过下一个房屋(因为相邻房屋不能被同时窃取)。最后,如果count大于等于k,说明当前的窃取能力满足条件,返回true;否则,返回false。

接下来,我们要找到满足条件的最小窃取能力。我们可以进行二分查找。我们初始化左边界left为0,右边界right为数组中的最大值。然后,我们不断进行二分查找,直到left和right相邻为止。在每次查找中,我们计算中间值mid,并调用check函数来判断给定的窃取能力是否满足条件。如果满足条件,说明我们可以尝试更小的窃取能力,所以我们将right更新为mid;否则,说明窃取能力太小,我们需要尝试更大的值,所以我们将left更新为mid。最后,返回right作为结果。

public class Solution {public int minCapability(int[] nums, int k) {int left = 0, right = 0;for (int x : nums) {right = Math.max(right, x);}while (left + 1 < right) {int mid = (left + right) >>> 1;if (check(nums, k, mid)) {right = mid;} else {left = mid;}}return right;}private boolean check(int[] nums, int k, int mx) {int count = 0;for (int i = 0; i < nums.length; i++) {if (nums[i] <= mx) {count++;i++;}}return count >= k;}
}

复杂度分析:

  • 时间复杂度:二分查找的时间复杂度是O(log m),其中m为最大的房屋金额。在每次二分查找中,我们需要遍历房屋金额数组nums计算满足条件的房屋数量,时间复杂度是O(n),其中n为房屋的数量。因此,总时间复杂度是O(n log m)。
  • 空间复杂度:我们只需要常数级别的额外空间存储一些变量。因此,总空间复杂度是O(1)。

LeetCode运行结果:

 方法二:二分+DP

首先,我们初始化窃取能力的范围,将 left 设置为 0,将 right 设置为 nums 数组中的最大值。

然后,在每次循环中,我们计算 mid 作为窃取能力的候选值,使用二分查找的思想,将窃取能力的范围从 (left, right] 缩小到 (left, mid] 或 (mid, right]。

接着,我们调用 check 方法判断以 mid 作为窃取能力是否满足条件。在 check 方法中,我们使用两个变量 f0 和 f1 来表示前一间房屋被窃取和当前房屋被窃取的情况下,窃贼已窃取的房屋数目。我们遍历给定的 nums 数组,根据房屋的价值和窃取能力来更新 f0 和 f1。如果房屋的价值大于窃取能力,则窃贼必须从前一间房屋开始才能窃取当前房屋,因此更新 f0 为 f1(即当前房屋不被窃取)。如果房屋的价值不大于窃取能力,则窃贼可以选择窃取当前房屋或不窃取,取决于哪种情况下窃贼窃取的房屋数目更多,即选择较大的值更新 f1。最后,我们判断 f1 是否大于等于 k,如果是则返回 true,表示窃取能力满足条件,否则返回 false。

class Solution {public int minCapability(int[] nums, int k) {int left = 0, right = 0;for (int x : nums) {right = Math.max(right, x);}while (left + 1 < right) { // 开区间写法int mid = (left + right) >>> 1;if (check(nums, k, mid)) {right = mid;} else {left = mid;}}return right;}private boolean check(int[] nums, int k, int mx) {int f0 = 0, f1 = 0;for (int x : nums) {if (x > mx) {f0 = f1;} else {int tmp = f1;f1 = Math.max(f1, f0 + 1);f0 = tmp;}}return f1 >= k;}
}

复杂度分析:

  • 时间复杂度:在 minCapability 方法中,我们使用二分查找来确定窃取能力的范围,时间复杂度为 O(log m),其中 m 是 nums 数组中的最大值。在 check 方法中,我们遍历给定的 nums 数组,时间复杂度为 O(n),其中 n 是 nums 数组的长度。综合起来,时间复杂度为 O(n log m)。
  • 空间复杂度:只使用了常数级别的额外空间来存储变量,因此空间复杂度为 O(1)。

LeetCode运行结果:

第二题

题目来源

16. 最接近的三数之和 - 力扣(LeetCode)

题目内容

解决方法

方法一:双指针

这个问题可以使用双指针来解决。首先,对数组进行排序。

然后,我们可以使用三个指针i,left和right来表示三个整数的位置。我们固定指针i,并使用左右指针left和right去寻找与target最接近的和。具体的算法如下:

  1. 初始化一个变量closestSum来保存与target最接近的和。
  2. 对数组进行排序。
  3. 遍历数组,对于每个元素nums[i],使用左右指针left和right从i+1和数组末尾开始向中间移动。
    • 计算当前三个数的和sum = nums[i] + nums[left] + nums[right]。
    • 如果sum与target相等,说明找到了与target相等的和,直接返回sum。
    • 如果sum与target的差的绝对值小于closestSum与target的差的绝对值,更新closestSum为sum。
    • 如果sum大于target,右指针左移一位。
    • 如果sum小于target,左指针右移一位。
  4. 返回closestSum作为结果。
import java.util.Arrays;class Solution {public int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);int n = nums.length;int closestSum = nums[0] + nums[1] + nums[2];  // 初始化closestSumfor (int i = 0; i < n - 2; i++) {int left = i + 1;int right = n - 1;while (left < right) {int sum = nums[i] + nums[left] + nums[right];if (sum == target) {return sum;}if (Math.abs(sum - target) < Math.abs(closestSum - target)) {closestSum = sum;}if (sum > target) {right--;} else {left++;}}}return closestSum;}
}

复杂度分析:

  • 该算法的时间复杂度为O(N^2),其中N为数组的长度。主要是因为需要遍历一次数组,并且在每个位置使用双指针去寻找与target最接近的和,因此时间复杂度为O(N^2)。
  • 该算法的空间复杂度为O(1),因为只需要使用常数个变量来存储结果,不需要额外的空间。

综上所述,该算法的时间复杂度为O(N^2),空间复杂度为O(1)。

LeetCode运行结果:

方法二:暴力搜索

除了使用双指针的方法外,我们还可以考虑使用暴力搜索的方法来解决这个问题。具体的算法如下:

  1. 初始化一个变量closestSum来保存与target最接近的和,初始值为一个较大的数。
  2. 遍历数组,对于每个元素nums[i],再嵌套两层循环分别遍历剩余的元素nums[j]和nums[k](j和k不等于i)。
  3. 计算当前三个数的和sum = nums[i] + nums[j] + nums[k]。
  4. 如果sum与target相等,说明找到了与target相等的和,直接返回sum。
  5. 如果sum与target的差的绝对值小于closestSum与target的差的绝对值,更新closestSum为sum。
  6. 继续遍历,直到数组遍历完毕。
  7. 返回closestSum作为结果。
class Solution {public int threeSumClosest(int[] nums, int target) {int n = nums.length;int closestSum = Integer.MAX_VALUE;  // 初始化closestSumfor (int i = 0; i < n - 2; i++) {for (int j = i + 1; j < n - 1; j++) {for (int k = j + 1; k < n; k++) {int sum = nums[i] + nums[j] + nums[k];if (sum == target) {return sum;}if (Math.abs(sum - target) < Math.abs(closestSum - target)) {closestSum = sum;}}}}return closestSum;}
}

 复杂度分析:

  • 时间复杂度为O(N^3),其中N为数组的长度。因为需要三重循环来搜索所有的可能组合,所以时间复杂度较高。
  • 空间复杂度为O(1),因为只需要使用常数个变量来存储结果,不需要额外的空间。

综上所述,使用暴力搜索的方法的时间复杂度为O(N^3),空间复杂度为O(1)。如果数组规模较小,这种方法也是可行的。但是当数组规模较大时,双指针的方法效率更高。

LeetCode运行结果:

方法三:排序

除了双指针和暴力搜索的方法,还可以考虑利用排序来优化算法。具体思路如下:

  1. 对数组进行排序,将数组按非递减顺序排列。
  2. 初始化一个变量closestSum来保存与target最接近的和,初始值为一个较大的数。
  3. 遍历排序后的数组,对于每个元素nums[i],使用双指针的方法在剩余的元素中寻找与target-nums[i]最接近的和。
  4. 计算当前三个数的和sum = nums[i] + nums[left] + nums[right]。
  5. 如果sum与target相等,说明找到了与target相等的和,直接返回sum。
  6. 如果sum与target的差的绝对值小于closestSum与target的差的绝对值,更新closestSum为sum。
  7. 如果sum比target大,将right指针左移一位;如果sum比target小,将left指针右移一位。
  8. 继续遍历,直到遍历完成或left和right指针相遇。
  9. 返回closestSum作为结果。
class Solution {public int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);  // 排序数组int n = nums.length;int closestSum = nums[0] + nums[1] + nums[2];  // 初始化closestSumfor (int i = 0; i < n - 2; i++) {int left = i + 1;int right = n - 1;while (left < right) {int sum = nums[i] + nums[left] + nums[right];if (sum == target) {return sum;}if (Math.abs(sum - target) < Math.abs(closestSum - target)) {closestSum = sum;}if (sum > target) {right--;} else {left++;}}}return closestSum;}
}

复杂度分析:

  • 时间复杂度为O(N^2logN),其中N为数组的长度。排序需要O(NlogN)的时间复杂度,而遍历数组和双指针操作需要O(N^2)的时间复杂度。
  • 空间复杂度为O(1),只需要使用常数个变量来存储结果,不需要额外的空间。

综上所述,利用排序来优化的方法的时间复杂度为O(N^2logN),空间复杂度为O(1)。该方法在处理较大规模的问题时效率更高。

LeetCode运行结果:

第三题

题目来源

17. 电话号码的字母组合 - 力扣(LeetCode)

题目内容

解决方法

方法一:回溯算法

这个问题可以使用回溯算法来解决。回溯算法是一种通过不断尝试所有可能的解决方案来求解问题的方法。

我们可以将数字和字母的映射关系存储在一个哈希表中,然后定义一个递归函数来生成所有可能的字母组合。具体步骤如下:

  1. 定义一个哈希表,将数字和字母的映射关系存储起来。
  2. 定义一个结果列表用于存储所有的字母组合。
  3. 编写一个递归函数,接受两个参数:当前数字索引和当前组合字符串。
    • 如果当前数字索引等于输入字符串的长度,说明已经遍历完所有数字,将当前组合字符串加入结果列表。
    • 否则,获取当前数字对应的字母集合,遍历字母集合,递归调用函数,将当前字母加到组合字符串的末尾,同时将数字索引加1。
  4. 调用递归函数,开始生成所有的字母组合。
  5. 返回结果列表。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;class Solution {private Map<Character, String> letters = new HashMap<>();public List<String> letterCombinations(String digits) {List<String> combinations = new ArrayList<>();if (digits == null || digits.length() == 0) {return combinations;}letters.put('2', "abc");letters.put('3', "def");letters.put('4', "ghi");letters.put('5', "jkl");letters.put('6', "mno");letters.put('7', "pqrs");letters.put('8', "tuv");letters.put('9', "wxyz");backtrack(combinations, digits, 0, new StringBuilder());return combinations;}private void backtrack(List<String> combinations, String digits, int index, StringBuilder current) {if (index == digits.length()) {combinations.add(current.toString());return;}char digit = digits.charAt(index);String letter = letters.get(digit);for (int i = 0; i < letter.length(); i++) {current.append(letter.charAt(i));backtrack(combinations, digits, index + 1, current);current.deleteCharAt(current.length() - 1);}}
}

复杂度分析:

  • 该算法的时间复杂度为O(3^N * 4^M),其中N是digits字符串中对应3个字母的数字的个数,M是digits字符串中对应4个字母的数字的个数。对于每个数字,最坏情况下需要尝试4个字母。
  • 空间复杂度为O(N+M),存储结果所需的空间和递归调用栈的空间。

因此,使用回溯算法可以解决这个问题,并且时间复杂度和空间复杂度都是较优的。

LeetCode运行结果:

方法二:队列

除了回溯算法之外,还可以使用队列(或者广度优先搜索)来解决这个问题。

我们可以将数字和字母的映射关系存储在一个哈希表中,然后从左到右遍历输入字符串的每个数字。对于每个数字,将其对应的字母集合中的每个字母与之前已经生成的所有组合进行拼接,形成新的组合,并将新的组合加入队列中。重复这个过程直到遍历完所有数字。

具体步骤如下:

  1. 定义一个哈希表,将数字和字母的映射关系存储起来。
  2. 定义一个队列,用于存储当前生成的所有组合。
  3. 如果输入字符串为空,则直接返回空列表。
  4. 将输入字符串的第一个数字对应的字母集合中的每个字母依次加到队列中作为初始组合。
  5. 从第二个数字开始遍历输入字符串,每次取出队列中的头部元素(即当前已经生成的组合),将当前数字对应的字母集合中的每个字母与已有组合进行拼接,并将新的组合加入队列。
  6. 重复步骤5,直到遍历完所有数字。
  7. 返回队列中的所有组合作为结果列表。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;class Solution {private Map<Character, String> letters = new HashMap<>();public List<String> letterCombinations(String digits) {List<String> combinations = new ArrayList<>();if (digits == null || digits.length() == 0) {return combinations;}letters.put('2', "abc");letters.put('3', "def");letters.put('4', "ghi");letters.put('5', "jkl");letters.put('6', "mno");letters.put('7', "pqrs");letters.put('8', "tuv");letters.put('9', "wxyz");Queue<String> queue = new LinkedList<>();queue.offer("");for (int i = 0; i < digits.length(); i++) {char digit = digits.charAt(i);String letter = letters.get(digit);int size = queue.size();while (size > 0) {String curr = queue.poll();for (int j = 0; j < letter.length(); j++) {queue.offer(curr + letter.charAt(j));}size--;}}while (!queue.isEmpty()) {combinations.add(queue.poll());}return combinations;}
}

复杂度分析:

  • 该算法的时间复杂度为O(3^N * 4^M),其中N是digits字符串中对应3个字母的数字的个数,M是digits字符串中对应4个字母的数字的个数。对于每个数字,最坏情况下需要尝试4个字母。
  • 空间复杂度为O(3^N * 4^M),存储结果所需的空间。

这种解法相比回溯算法而言,更利于处理大量输入,因为它不需要递归调用,而是使用队列进行遍历和拼接。

LeetCode运行结果:

方法三:递归

除了回溯算法、队列,我们还可以使用递归来解决这个问题。

我们可以将问题划分为子问题,每次递归都处理当前数字对应的字母集合中的一个字母,并将递归结果与其他数字的组合进行拼接,形成最终的结果。具体步骤如下:

  1. 定义一个哈希表,将数字和字母的映射关系存储起来。
  2. 定义一个递归函数,参数包括当前数字的索引、输入字符串、当前字母组合和最终结果列表。
  3. 递归函数的停止条件为当前数字索引等于字符串长度,即已经处理完所有数字。
  4. 在递归函数中,获取当前数字对应的字母集合。
  5. 遍历字母集合,对于每个字母,将其与当前字母组合拼接,并调用递归函数处理下一个数字。
  6. 当递归函数返回时,将当前字母组合添加到最终结果列表中。
  7. 返回最终结果列表作为结果。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;class Solution {private Map<Character, String> letters = new HashMap<>();public List<String> letterCombinations(String digits) {List<String> combinations = new ArrayList<>();if (digits == null || digits.length() == 0) {return combinations;}letters.put('2', "abc");letters.put('3', "def");letters.put('4', "ghi");letters.put('5', "jkl");letters.put('6', "mno");letters.put('7', "pqrs");letters.put('8', "tuv");letters.put('9', "wxyz");backtrack(0, digits, new StringBuilder(), combinations);return combinations;}private void backtrack(int index, String digits, StringBuilder current, List<String> combinations) {if (index == digits.length()) {combinations.add(current.toString());return;}char digit = digits.charAt(index);String letter = letters.get(digit);for (char c : letter.toCharArray()) {current.append(c);backtrack(index + 1, digits, current, combinations);current.deleteCharAt(current.length() - 1);}}
}

复杂度分析:

  • 该算法的时间复杂度为O(3^N * 4^M),其中N是digits字符串中对应3个字母的数字的个数,M是digits字符串中对应4个字母的数字的个数。对于每个数字,最坏情况下需要尝试4个字母。
  • 空间复杂度为O(N+M),其中N是digits字符串中对应3个字母的数字的个数,M是digits字符串中对应4个字母的数字的个数。除了存储结果所需的空间,递归调用栈的空间复杂度为O(N+M)。

这种解法利用了递归的思想,将问题划分为子问题,并通过不断拼接字母来构建最终结果。递归方法简洁直观,但在处理大量输入时可能会导致栈溢出。因此,在实际应用中,需要注意输入规模的限制。

LeetCode运行结果:

方法四:迭代

除了前面提到的回溯算法、队列和递归,还可以使用迭代的方法来解决这个问题。

迭代的思路是,从左到右依次处理输入字符串中的每个数字,并利用一个临时列表来保存当前位置之前的所有字母组合。对于每个新的数字,将其对应的字母与临时列表中的每个字母组合进行拼接,形成新的字母组合,并更新临时列表。重复这个过程,直到处理完所有数字,最终得到的临时列表中即为结果。

具体步骤如下:

  1. 定义一个哈希表,将数字和字母的映射关系存储起来。
  2. 初始化一个临时列表,将第一个数字对应的字母集合中的每个字母作为初始的字母组合,并加入到临时列表中。
  3. 从第二个数字开始遍历输入字符串的每个数字。
  4. 获取当前数字对应的字母集合。
  5. 遍历字母集合,对于每个字母,将其与临时列表中的每个字母组合拼接,形成新的字母组合,并将其添加到临时列表中。
  6. 更新临时列表,将其中的元素作为下一轮的参考,供下一个数字使用。
  7. 最终得到的临时列表即为结果。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;class Solution {private Map<Character, String> letters = new HashMap<>();public List<String> letterCombinations(String digits) {List<String> combinations = new ArrayList<>();if (digits == null || digits.length() == 0) {return combinations;}letters.put('2', "abc");letters.put('3', "def");letters.put('4', "ghi");letters.put('5', "jkl");letters.put('6', "mno");letters.put('7', "pqrs");letters.put('8', "tuv");letters.put('9', "wxyz");combinations.add("");for (int i = 0; i < digits.length(); i++) {String letter = letters.get(digits.charAt(i));int size = combinations.size();for (int j = 0; j < size; j++) {String prev = combinations.remove(0);for (char c : letter.toCharArray()) {combinations.add(prev + c);}}}return combinations;}
}

复杂度分析:

  • 该算法的时间复杂度为O(3^N * 4^M),其中N是digits字符串中对应3个字母的数字的个数,M是digits字符串中对应4个字母的数字的个数。对于每个数字,最坏情况下需要尝试4个字母。
  • 空间复杂度为O(3^N * 4^M),存储结果所需的空间。

迭代方法是一种非常高效的解法,它避免了递归调用栈的开销,适用于处理大量输入的情况。

LeetCode运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/138906.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Aztec交易架构解析

1. 引言 前序博客有&#xff1a; Aztec的隐私抽象&#xff1a;在尊重EVM合约开发习惯的情况下实现智能合约隐私完全保密的以太坊交易&#xff1a;Aztec网络的隐私架构Aztec.nr&#xff1a;Aztec的隐私智能合约框架——用Noir扩展智能合约功能Account Abstraction账号抽象——…

【数据增强】

【数据增强】 1 数据增强的情形2 数据增强的方法 1 数据增强的情形 当数据比较小&#xff0c;难以获取新的训练数据时&#xff0c;可以考虑数据增强&#xff0c;如随机裁剪部分&#xff0c;随机左右上下翻转、随机旋转一个角度、随机亮度变化等微小变化&#xff0c;数据的多样…

flex布局与float布局

float布局 俩栏 三栏 flex布局

css自学框架之二级下拉菜单

下拉菜单是我们开发中最常见&#xff0c;最常用的&#xff0c;今天我们就自学二级下来菜单。首先看一下最终效果&#xff1a; 一、css代码 .arrow-down::before {content: ""; width: 10px;height: 10px;border: solid ;border-width: 2px 2px 0 0;border-color: …

大型集团借力泛微搭建语言汇率时区统一、业务协同的国际化OA系统

国际化、全球化集团&#xff0c;业务遍布全世界&#xff0c;下属公司众多&#xff0c;集团对管理方式和企业文化塑造有着很高的要求。不少大型集团以数字化方式助力全球统一办公&#xff0c;深化企业统一管理。 面对大型集团全球化的管理诉求&#xff0c;数字化办公系统作为集…

Quartz 建表语句SQL文件

SQL文件在jar里面&#xff0c;github下载 https://github.com/quartz-scheduler/quartz/releases/tag/v2.3.2 解压&#xff0c;sql文件路径&#xff1a;quartz-core\src\main\resources\org\quartz\impl\jdbcjobstore tables_mysql_innodb.sql # # In your Quartz propertie…

JavaScript——概念(JavaScript是什么?组成、输入语法等)

目录 JavaScript的概念 JavaScript是什么 JavaScript组成 JavaScript如何写 JavaScript书写位置 注释 结束符 输出和输入语法 输出语法 输入语法 代码执行顺序 字面量 总结 JavaScript的概念 JavaScript是什么 是一种运行在客户端&#xff08;浏览器&#xff09;的…

排序算法-----归并排序

目录 前言&#xff1a; 归并排序 1. 定义 2.算法过程讲解 2.1大致思路 2.2图解示例 拆分合成步骤 ​编辑 相关动态图 3.代码实现&#xff08;C语言&#xff09; 4.算法分析 4.1时间复杂度 4.2空间复杂度 4.3稳定性 前言&#xff1a; 今天我们就开始学习新的排序算法…

iPhone15线下购买,苹果零售店前门店排长队

今年的苹果新品发布会于北京时间 9 月 13 日凌晨举行&#xff0c;并于 9 月 15 日&#xff08;周五&#xff09;开启订购&#xff0c;9 月 22 日&#xff08;周五&#xff09;起正式发售。 据多位网友反馈&#xff0c;首批苹果 iPhone15 系列手机、Apple Watch Ultra 2 / Seri…

web:[ACTF2020 新生赛]Exec

背景知识 命令执行漏洞 linux命令 题目 打开题目&#xff0c;页面显示的是一个ping 尝试一下 查看源代码发现 尝试ping一下百度 由题目名可知这道题关于exec&#xff08;命令执行&#xff09;&#xff0c;这里需要联想到可以多条命令执行 输入baidu.com;ls 尝试;号是否能够…

Qt核心:元对象系统、属性系统、对象树、信号槽

一、元对象系统 1、Qt 的元对象系统提供的功能有&#xff1a;对象间通信的信号和槽机制、运行时类型信息和动态属性系统等。 2、元对象系统是 Qt 对原有的 C进行的一些扩展&#xff0c;主要是为实现信号和槽机制而引入的&#xff0c; 信号和槽机制是 Qt 的核心特征。 3、要使…

电脑桌面透明便签软件是哪个?

在现代快节奏的工作环境中&#xff0c;许多上班族都希望能够在电脑桌面上方便地记录工作资料、重要事项、工作流程等内容。为了解决这个问题&#xff0c;一款优秀的电脑桌面便签软件是必不可少的。在选择桌面便签软件时&#xff0c;许多用户也希望便签软件能够与电脑桌面壁纸相…

go学习-GMP模型

GMP 好理解还是 GPM 好理解&#xff1f; 按照上述图&#xff0c;从上往下&#xff0c;GPM更适合理解 GMP 模型&#xff1a; Go 语言运行时系统中的 Goroutine、用于管理 Goroutine 调度的 Go Scheduler&#xff08;P&#xff09;、机器可用的逻辑处理器数量&#xff08;M&#…

竞赛选题 基于深度学习的目标检测算法

文章目录 1 简介2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 1 简介 &#x1f5…

计算机网络常见面试题

目录 一、谈一谈对OSI七层模型和TCP/IP四层模型的理解&#xff1f; 答&#xff1a;OSI七层模型主要分为&#xff1a; TCP/IP四层协议&#xff1a; 二、谈谈TCP协议的3次握手过程&#xff1f; 三、TCP协议为什么要3次握手&#xff1f;2次&#xff0c;4次不行吗&#xff1f; …

关于IDEA没有显示日志输出?IDEA控制台没有显示Tomcat Localhost Log和Catalina Log 怎么办?

问题描述&#xff1a; 原因是;CATALINA_BASE里面没有相关的文件配置。而之前学习IDEA的时候&#xff0c;把这个文件的位置改变了。导致&#xff0c;最后输出IDEA的时候&#xff0c;不会把日志也打印出来。 检查IDEA配置; D:\work_soft\tomcat_user\Tomcat10.0\bin 在此目录下&…

华为OD机试 - 构成正方形的数量 - 数据结构map(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 …

浅谈建筑能耗智能监测平台发展现状及未来趋势

安科瑞 华楠 摘要&#xff1a;文章以每年发布的上海市国家机关办公建筑和大型公共建筑能耗监测及分析报告变化为切入点&#xff0c;分析了历年能耗分析报告的内容和功能变化&#xff1b;介绍了上海市国家机关办公建筑和大型公共建筑能耗监测平台发展和应用历程&#xff1b;揭示…

基于SpringBoot的网上超市系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 用户功能实现 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计…

OpenHarmony Meetup常州站招募令

OpenHarmony Meetup 常州站正火热招募中&#xff01; 诚邀充满激情的开发者参与线下盛会~ 探索OpenHarmony前沿科技&#xff0c;畅谈未来前景&#xff0c; 感受OpenHarmony生态构建之路的魅力&#xff01; 线下参与&#xff0c;名额有限&#xff0c;仅限20位幸运者&#xff01…