怒刷LeetCode的第7天(Java版)

news2024/11/24 7:49:54

目录

第一题

题目来源

题目内容

解决方法

方法一:二分+贪心

 方法二:二分+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运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法】单调栈

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

“高级Java注解的简介及应用“

目录 引言1. Java注解简介1.1 什么是注解1.2 注解的作用1.3 常见的Java注解 2. 自定义注解案例3. AOP自定义注解的应用3.1 AOP简介3.2 AOP自定义注解 总结 引言 在Java开发中&#xff0c;注解是一种非常重要的语言特性&#xff0c;它们可以为代码提供额外的信息和元数据。本文…

MFC 绘图

效果图&#xff1a;三张bmp图 字 竖线 组成 在OnPaint()函数中 CPaintDC dc(this);CRect rect;GetClientRect(&rect); //获取客户区矩形CDC dcBmp; //定义并创建一个内存设备环境dcBmp.CreateCompatibleDC(&dc); //创建兼容性DCCBitmap …

如何把利用paddlepaddle导出的json文件转化为yolo或者voc文件

目录 1. 修改源码&#xff0c;让模型能够生成出对于单个图像的标注。 2. 把数据转为yolo格式 3.把yolo格式转化为xml格式 这两天想偷懒&#xff0c;想让模型先在数据上标一遍&#xff0c;然后我再做修正&#xff0c;主要是图个省事。由于我们主要是利用paddle,模型也是基于p…

python+django学习资料在线分享系统vue

本站是一个B/S模式系统&#xff0c;采用vue框架作为开发技术&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得校园资料分享平台管理工作系统化、规范化。技术栈 后端&#xff1a;pyth…

同城信息服务源码 本地生活服务小程序源码

同城信息服务源码 本地生活服务小程序源码 功能介绍&#xff1a; 基本设置&#xff1a;网站参数、安全设置、分站管理、支付设置、操作日志、地区设置、公交地铁、国际区号、清理缓存、模板风格、模块管理、域名管理、底部菜单、消息通知、登录设置 其他设置&#xff1a;关键…

Linux内核源码分析 (B.7)深入理解 slab cache 内存分配全链路实现

Linux内核源码分析 (B.7)深入理解 slab cache 内存分配全链路实现 文章目录 Linux内核源码分析 (B.7)深入理解 slab cache 内存分配全链路实现1\. slab cache 如何分配内存2\. slab cache 的快速分配路径3\. slab cache 的慢速分配路径3.1 从本地 cpu 缓存 partial 列表中分配3…

小程序多种姿势更换文章

概述 简单的文章切换demo&#xff0c;通过倒计时、摇一摇、双击进行文章切换 详细 直接看效果图吧&#xff01;比较简单&#xff0c;主要是练习一下... 小程序不带双击事件&#xff0c;可以记录第一次单击事件和第二次单机事件进行双击操作。 1、摇一摇是通过调用官方的 …

将多个元素循环起来构成迭代器itertools.cycle()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将多个元素循环起来 构成迭代器 itertools.cycle() 选择题 以下说法错误的是? import itertools a[1,2,3] print("【显示】a:");print(a) bitertools.cycle(a) print("【执行】…

MVC设计思想理解和ASP.NET MVC理解

三层模式 三层模式包括:UI层,业务逻辑层,数据访问层,模型层 MVC设计思想和ASP.NET MVC理解 MVC设计思想: MVC的思想就是把我们的程序分为三个核心的模块,这三个模块的详细介绍如下: 模型(Model) :负责封装与引用程序的业务逻辑相关的数据以及对数据的处理方法。模型层有对…

Redis 列表操作实战(全)

目录 LINDEX 获取指定下标元素 LSET 指定下标添加元素 LPUSH 将元素插入列表头 LPUSHX RPUSH 将元素插入列表尾 RPUSHX LINSERT 将元素插入列表某位置之前 LLEN 列表长度 LPOP 取列表头元素 RPOP 取列表尾元素 BLPOP 阻塞式取列表头元素 BRPOP 阻塞式取列表尾元素…

精品Python医院挂号信息管理系统

《[含文档PPT源码等]精品基于Python实现的医院挂号信息管理系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#xff1a;JavaScript、…

智能指针解读(2)

前面一篇文章&#xff0c;我讲解了智能指针的原理&#xff0c;并实现了一个简单的智能指针。为了加深对智能指针的理解&#xff0c;在这篇文章中&#xff0c;我把C中的几个智能指针讲解下&#xff1a;auto_ptr, unique_ptr, shared_ptr, weak_ptr。 1、auto_ptr 前面的文章我…

在服务器上创建git仓库

1、在服务器上创建git仓库 选择一个创建文件夹的地方&#xff0c;这个地方不会将源码存放在这里&#xff0c;只用于版本控制 # 创建一个专门放置git的文件夹&#xff0c;也可以叫其它名 mkdir git && cd git # 创建自己项目的文件夹&#xff0c;文件夹后面要带 .git…

电工三级证(高级)实战项目:信号交通灯的PLC控制

实训目的 掌握比较指令掌握时钟指令掌握时间同步的方法 控制要求 PLC设备:Siemens S7-200 要求:按下起动按钮SB1后&#xff0c;东西方向绿灯亮20s&#xff0c;之后再闪烁绿灯3s&#xff0c;之后黄灯亮3s&#xff0c;最后红灯亮26s&#xff1b;同时&#xff0c;南北方向红灯亮…

Winscp--使用技巧

原文网址&#xff1a;Winscp--使用技巧_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Winscp的使用技巧。 保持连接 有时经常自动断开&#xff0c;需要重新连接&#xff0c;解决方法如下&#xff1a; 修改默认目录 每次连接后会自动定位到如下目录&#xff1a;本地Windows的Do…

2023最新安装微信小程序开发软件安装教程

一&#xff0c;安装开发者工具 我们在开发小程序之前&#xff0c;首先需要安装小程序开发者工具&#xff0c;今天就来教大家安装小程序开发者工具。 微信开放文档 (qq.com)https://developers.weixin.qq.com/miniprogram/dev/framework/ 官网工具下载地址&#xff1a; 微信…

Linux 进程相关命令

输入 ps aux后里面有个STAT参数 kill -9 进程ID 或者kill -9 SIGKILL 进程ID强制杀死

76、SpringBoot 整合 MyBatis------使用 sqlSession 作为 Dao 组件(就是ssm那一套,在 xml 写sql)

就是 ssm 那套&#xff0c;在xml 上面写sql ★ 基于SqlSession来实现DAO组件的方式 - MyBatis提供的Starter会自动在Spring容器中配置SqlSession&#xff08;其实SqlSessionTemplate实现类&#xff09;、并将它注入其他组件&#xff08;如DAO组件&#xff09;- DAO组件可直接…

SpringBoot整合Mybatis-Plus分页插件的使用

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…