怒刷LeetCode的第7天(Java版)

2023-09-19 10:39:42

目录

第一题

题目来源

题目内容

解决方法

方法一:二分+贪心

 方法二:二分+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];  // 初始化closestSum
        
        for (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;  // 初始化closestSum
        
        for (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];  // 初始化closestSum
        
        for (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运行结果:

更多推荐

QRunnable与外界互传对象

1.概述QRunnable与外界互通讯是有两种方法的使用多继承。让我们的自定义线程类同时继承于QRunnable和QObject,这样就可以使用信号和槽,但是多线程使用比较麻烦,特别是继承于自定义的类时,容易出现接口混乱,所以在项目中尽量少用多继承。//使用多继承classrunnable:publicQObject,

xdebug3开启profile和trace

【xdebug开启profiler】https://xdebug.org/docs/profilerhttp://www.xdebug.org.cn/docs/profiler1、php.ini添加下面配置然后重启php容器:xdebug.mode=profile;这个目录保存profile和trace文件xdebug

TQ210-Bootloader-Uboot(LTS)

Bootloader的作用Bootloader是位于计算机系统启动过程中的程序,它的主要作用是将操作系统从磁盘等外部存储介质加载到计算机内存中,并启动操作系统执行。Bootloader通常包括硬件初始化、自检、异常处理和启动操作系统等功能。它是计算机系统中非常重要的部分,直接影响系统启动和运行的稳定性和性能。U-boo

10分钟设置免费海外远程桌面

前言本教程将向您介绍如何使用AmazonLightsail服务的免费套餐轻松搭建属于您的远程桌面。依托于Amazon全球可用区,您可以在世界各地搭建符合您配置需求的远程桌面。本教程需要先拥有亚马逊云科技海外账户。现在注册亚马逊云科技账户可以享受12个月免费套餐,包括EC2等多种热门产品。亚马逊云科技开发者社区为开发者们

LinkedList与链表

目录一、Arraylist的缺陷二、链表2.1链表的概念和结构2.2链表的实现三、链表面试题3.1删除链表中所有值为val的节点3.2反转一个单链表3.3链表的中间节点3.4将有序链表合并3.5输出倒数第k个节点3.6链表分割3.7链表的回文结构3.8找两个链表的公共节点3.9判断链表是否有环3.10找链表入环的第一个

Axure设计之数据图表折线图(中继器)

折线图是一种用于显示数据随时间变化或有序类别关系变化的图形。在折线图中,数据点用线段连接,并按照时间顺序或类别顺序排列。通过观察折线图的走势和变化,可以获得数据变化的趋势和规律。在系统统计分析中折线图经常被使用的数据图表。一、效果展示1、该示例为折线图,分别对客流量和购买量以月份为单位进行统计;2、横轴为统计月份,纵轴

Python经典练习题(一)

文章目录🍀第一题🍀第二题🍀第三题🍀第四题🍀第五题🍀第一题有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?这里我们使用两种方法进行求解解法一:循环套循环count=0foriinrange(1,5):forjinrange(1,5):forkinrange(1,5):if(i!

如何辨认是否是高防服务器?

因为现在高防服务器比较出名,很多IDC服务器商都标榜自己的服务器是高防服务器,那我们怎么辨别服务器商说的高防服务器是否是真正的高防服务器呢?今天小编就告诉大家几点辨认是否是高防服务器的小要点。向选择好的服务器商要一下高防服务器的IP,然后通过简单的测试来看一看,也就是ping指令(用来测试网络连接是否正常)来检查,一般

如何使用插件扩展Vue的功能

Vue是一款流行的前端JavaScript框架,它的核心库提供了许多强大的功能,但有时我们需要额外的功能来满足特定需求。这时,使用插件来扩展Vue的功能是一个很好的选择。本文将详细介绍如何使用插件来扩展Vue的功能,包括创建、注册和使用插件。Vue提供了强大的插件系统,供大家来扩展项目功能。开发者可以自由的使用公开的第

Python+pytest接口自动化之参数关联

一、什么是参数关联?参数关联,也叫接口关联,即接口之间存在参数的联系或依赖。在完成某一功能业务时,有时需要按顺序请求多个接口,此时在某些接口之间可能会存在关联关系。比如:B接口的某个或某些请求参数是通过调用A接口获取的,即需要先请求A接口,从A接口的返回数据中拿到需要的字段值,在请求B接口时作为请求参数传入。二、有哪些

Hoeffing不等式

在李航老师的统计学习方法(第一版中)Hoeffing不等式Hoeffing不等式Hoeffing不等式是这样子给出的设X1,X2,...,XNX_1,X_2,...,X_NX1​,X2​,...,XN​是独立随机变量,且Xi∈[ai,bi],i=1,2,...,N;SN=∑i=1NXiX_i\in[a_i,b_i],i

热文推荐