【区间、栈】算法例题

目录

 六、区间

48. 汇总区间 ①

49. 合并区间 ②

50. 插入区间 ②

51. 用最少数量的箭引爆气球 ② ×

七、栈

52. 有效的括号 ①

53. 简化路径 ② ×

54. 最小栈 ② ×

55. 逆波兰表达式求值 ② √-

56. 基本计算器 ③


 六、区间

48. 汇总区间 ①

 给定一个  无重复元素 的 有序 整数数组 nums 。

返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。

列表中的每个区间范围 [a,b] 应该按如下格式输出:

  • "a->b" ,如果 a != b
  • "a" ,如果 a == b

示例 1:

输入:nums = [0,1,2,4,5,7]
输出:["0->2","4->5","7"]
解释:区间范围是:
[0,2] --> "0->2"
[4,5] --> "4->5"
[7,7] --> "7"

示例 2:

输入:nums = [0,2,3,4,6,8,9]
输出:["0","2->4","6","8->9"]
解释:区间范围是:
[0,0] --> "0"
[2,4] --> "2->4"
[6,6] --> "6"
[8,9] --> "8->9"

提示:

  • 0 <= nums.length <= 20
  • -231 <= nums[i] <= 231 - 1
  • nums 中的所有值都 互不相同
  • nums 按升序排列

方法1:

    public List<String> summaryRanges(int[] nums) {ArrayList<String> list = new ArrayList<>();if (nums.length == 0){return null;}int left = 0;int right = left + 1;while (right < nums.length){if (nums[right] - nums[right - 1] == 1){right++;}else {if (right == left + 1){list.add(nums[left] + "");}else {list.add(nums[left] + "->" + nums[right - 1]);}left = right;right++;}}if (right == left + 1){list.add(nums[left] + "");}else {list.add(nums[left] + "->" + nums[right - 1]);}return list;}

方法2:(0ms)

    public List<String> summaryRanges(int[] nums) {List<String> ret = new ArrayList<String>();int i = 0;int n = nums.length;while (i < n) {int low = i;i++;while (i < n && nums[i] == nums[i - 1] + 1) {i++;}int high = i - 1;StringBuffer temp = new StringBuffer(Integer.toString(nums[low]));if (low < high) {temp.append("->");temp.append(Integer.toString(nums[high]));}ret.add(temp.toString());}return ret;}

49. 合并区间 ②

 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

二维数组排序:

// 先升序排序
Arrays.sort(intervals, (i1,i2) -> i1[0]-i2[0]);

方法1:(227ms)

    public static int[][] merge(int[][] intervals) {sort(intervals);int[][] result = new int[intervals.length][2];int index = 0;ArrayDeque<Integer> queue = new ArrayDeque<>();for (int[] interval : intervals) {if (queue.size() == 0){queue.addLast(interval[0]);queue.addLast(interval[1]);} else {if (interval[0] <= queue.getLast()){if (interval[1] > queue.getLast()){queue.removeLast();queue.addLast(interval[1]);}}else {result[index][0] = queue.removeFirst();result[index][1] = queue.removeLast();index++;queue.addLast(interval[0]);queue.addLast(interval[1]);}}}result[index][0] = queue.getFirst();result[index][1] = queue.getLast();result = Arrays.copyOf(result, index + 1);return result;}public static int[][] sort(int[][] srcArrays){for (int i = 0; i < srcArrays.length - 1; i++) {for (int j = i + 1; j < srcArrays.length; j++) {if (srcArrays[i][0] > srcArrays[j][0]){int temp[] = srcArrays[i];srcArrays[i] = srcArrays[j];srcArrays[j] = temp;}}}return srcArrays;}

方法2:(0ms)

    static int[][] merge(int[][] intervals) {int min = Integer.MAX_VALUE;int max = Integer.MIN_VALUE;for (int[] x : intervals) {min = Math.min(min, x[0]);max = Math.max(max, x[0]);}int[] range = new int[max - min + 1];for (int i = 0; i < intervals.length; i++) {// 记录了从某个start出发,最大结束区间是在哪里。即: range[start] = max(range[end])range[intervals[i][0] - min] = Math.max(intervals[i][1] - min, range[intervals[i][0] - min]);}int start = 0;int end = 0;List<int[]> res = new ArrayList<>();for (int i = 0; i < range.length; i++) {if (range[i] == 0) {// 没有从这个start出发的。continue;}// 如果有,就计算这个点能到多远if (i <= end) {// 这个start在end以内,说明可以连接起来end = Math.max(range[i], end);} else {// 这个satrt超出了end的范围,说明找到了一个区间。res.add(new int[] { start + min, end + min });start = i;end = range[i];}}res.add(new int[] { start + min, end + min });return res.toArray(new int[res.size()][]);}

方法3:(2ms)

    public int[][] merge(int[][] intervals) {quickSort(intervals,0,intervals.length-1);List<int[]> ans = new ArrayList();ans.add(intervals[0]);for(int[] interval :  intervals){int[] ansInterval = ans.get(ans.size()-1);if(ansInterval[1] < interval[0]){ans.add(interval);}else{ansInterval[1] = Math.max(ansInterval[1],interval[1]);}}return ans.toArray(new int[ans.size()][]);}

方法4:(8ms)

public int[][] merge(int[][] intervals) {// 先按照区间起始位置排序Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);// 遍历区间int[][] res = new int[intervals.length][2];int idx = -1;for (int[] interval: intervals) {// 如果结果数组是空的,或者当前区间的起始位置 > 结果数组中最后区间的终止位置,// 则不合并,直接将当前区间加入结果数组。if (idx == -1 || interval[0] > res[idx][1]) {res[++idx] = interval;} else {// 反之将当前区间合并至结果数组的最后区间res[idx][1] = Math.max(res[idx][1], interval[1]);}}return Arrays.copyOf(res, idx + 1);}作者:Sweetiee 🍬
链接:https://leetcode.cn/problems/merge-intervals/solutions/204805/chi-jing-ran-yi-yan-miao-dong-by-sweetiee/

方法5(9ms)

    public int[][] merge(int[][] intervals) {Arrays.sort(intervals, (a, b) -> a[0] - b[0]);List<int[]> ans = new ArrayList<>();for (int i = 0; i < intervals.length; ++i) {if (ans.size() == 0 || intervals[i][0] > ans.get(ans.size() - 1)[1]) ans.add(intervals[i]);else ans.get(ans.size() - 1)[1] = Math.max(intervals[i][1], ans.get(ans.size() - 1)[1]);}return ans.toArray(new int[ans.size()][2]);}

50. 插入区间 ②

 给你一个 无重叠的 ,按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

示例 1:

输入:intervals = [[1,3],[6,9]], newInterval = [2,5]
输出:[[1,5],[6,9]]

示例 2:

输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出:[[1,2],[3,10],[12,16]]
解释:这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。

示例 3:

输入:intervals = [], newInterval = [5,7]
输出:[[5,7]]

示例 4:

输入:intervals = [[1,5]], newInterval = [2,3]
输出:[[1,5]]

示例 5:

输入:intervals = [[1,5]], newInterval = [2,7]
输出:[[1,7]]

提示:

  • 0 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= intervals[i][0] <= intervals[i][1] <= 105
  • intervals 根据 intervals[i][0] 按 升序 排列
  • newInterval.length == 2
  • 0 <= newInterval[0] <= newInterval[1] <= 105

方法2:(0ms)

    public int[][] insert(int[][] intervals, int[] newInterval) {int n = intervals.length;if(n == 0) {int[][] result = new int[1][2];result[0] = newInterval;return result;}int min = newInterval[0], max = newInterval[1];int start = 0;while (start < n && min > intervals[start][1]) {start++;}if(start == n) {int[][] result = new int[n+1][2];for (int i = 0; i < n; i++) {result[i] = intervals[i];}result[n] = newInterval;return result;}min = Math.min(min, intervals[start][0]);int end = n-1;while (end >= 0 && max < intervals[end][0]) {end--;}if(end == -1) {int[][] result = new int[n+1][2];result[0] = newInterval;for (int i = 0; i < n; i++) {result[i+1] = intervals[i];}return result;}max = Math.max(max, intervals[end][1]);int[][] result = new int[start + n - end][2];for (int i = 0; i < start; i++) {result[i] = intervals[i];}result[start] = new int[]{min, max};for (int i = 0; i < n - end - 1; i++) {result[start+1+i] = intervals[end+i+1];}return result;}

方法3:(1ms)

    public int[][] insert(int[][] intervals, int[] newInterval) {List<int[]> list = new LinkedList<>();int i = 0;//区间不重合while(i < intervals.length && newInterval[0] > intervals[i][1]) {list.add(new int[]{intervals[i][0],intervals[i][1]});i++;}//区间开始重合 本题难点while(i < intervals.length && newInterval[1] >= intervals[i][0]) {newInterval[0] = Math.min(newInterval[0], intervals[i][0]);newInterval[1] = Math.max(newInterval[1], intervals[i][1]);i++;}list.add(newInterval);//剩下的区间加入到集合while(i < intervals.length) {list.add(intervals[i]);i++;}int[][] res = new int[list.size()][];return list.toArray(res);}

51. 用最少数量的箭引爆气球 ② ×

 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。

一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstartxend, 且满足  xstart ≤ x ≤ xend,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限地前进。

给你一个数组 points ,返回引爆所有气球所必须射出的 最小 弓箭数 

示例 1:

输入:points = [[10,16],[2,8],[1,6],[7,12]]
输出:2
解释:气球可以用2支箭来爆破:
-在x = 6处射出箭,击破气球[2,8]和[1,6]。
-在x = 11处发射箭,击破气球[10,16]和[7,12]。

示例 2:

输入:points = [[1,2],[3,4],[5,6],[7,8]]
输出:4
解释:每个气球需要射出一支箭,总共需要4支箭。

示例 3:

输入:points = [[1,2],[2,3],[3,4],[4,5]]
输出:2
解释:气球可以用2支箭来爆破:
- 在x = 2处发射箭,击破气球[1,2]和[2,3]。
- 在x = 4处射出箭,击破气球[3,4]和[4,5]。

提示:

  • 1 <= points.length <= 105
  • points[i].length == 2
  • -231 <= xstart < xend <= 231 - 1

方法2:(28ms)

    public int findMinArrowShots(int[][] points) {if(points == null || points.length == 0) return 0;Arrays.sort(points, new Comparator<int[]>(){public int compare(int[] i, int[] j){if(i[1] == j[1]) return i[0] - j[0];return i[1] - j[1];}});int start = points[0][0], end = points[0][1], counts = 1;for(int i = 0; i < points.length; i++){if(points[i][0] <= end){start = Math.max(points[i][0], start);end = Math.min(points[i][1], end);}else{counts++; start = points[i][0]; end = points[i][1];}}return counts;}

方法3:(51ms)

    public int findMinArrowShots(int[][] points) {Arrays.sort(points, (a, b) -> Integer.compare(a[1], b[1]));int pos = points[0][1];int count = 1;for (int i = 1; i < points.length; i++) {if (pos >= points[i][0]) {continue;} else {pos = points[i][1];count++;}}return count;}

方法4:(56ms)

    public int findMinArrowShots(int[][] points) {// 贪心int n = points.length;if(n == 0) return 0;Arrays.sort(points, (a, b) -> Long.compare(a[1], b[1]));int result = 1;// 第一支箭直接射出int arrow = points[0][1];  for(int i = 1; i < n; i++){if(points[i][0] <= arrow){// 该区间能被当前箭right穿过continue;}arrow = points[i][1]; // 继续射出箭result++; // 箭数加1}return result;}作者:ydnacyw
链接:https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/solutions/2539356/java-tan-xin-tu-jie-yi-dong-by-cao-yang-yjv4c/

七、栈

52. 有效的括号 ①

 给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

    public static boolean isValid(String s) {Stack<Character> stack = new Stack<>();for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);if (stack.size() == 0 || c == '(' || c == '[' || c == '{'){stack.push(c);}else {if (c == ')' && stack.peek() == '('){stack.pop();}else if (c == ']' && stack.peek() == '['){stack.pop();}else if (c == '}' && stack.peek() == '{'){stack.pop();}else {stack.push(c);}}}return stack.size() == 0? true : false;}

方法2:

    public boolean isValid(String s) {if ((s.length() & 1) != 0 || s.length() == 1) {return false;}int max = s.length() / 2;char[] chars = new char[max];int index = 0;for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);if ('(' == c || '[' == c || '{' == c) {if (index >= max) {return false;}chars[index] = c;index++;} else if (index-- > 0) {char aChar = chars[index];if (')' == c) {if (aChar != '(') {return false;}} else if (']' == c) {if (aChar != '[') {return false;}} else if ('}' == c) {if (aChar != '{') {return false;}}} else {return false;}}return index==0;}

方法3:

    public boolean isValid(String s) {char[] l = {'(','[','{'};char[] r = {')',']','}'};char[] ss = s.toCharArray();int n = ss.length;char[] st = new char[10010];int top = -1;st[++top] = ss[0];boolean flag = true;for(int i = 1; i < n; i++){char c = ss[i];if(c == '(' || c == '[' || c == '{')st[++top] = c;else{if(top < 0){flag = false;break;}if(c == ')' && st[top] != '('){flag = false;break;}if(c == ']' && st[top] != '['){flag = false;break;}if(c == '}' && st[top] != '{'){flag = false;break;}top--;}}if(top >= 0)flag = false;return flag;}

53. 简化路径 ② ×

给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。

在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。

请注意,返回的 规范路径 必须遵循下述格式:

  • 始终以斜杠 '/' 开头。
  • 两个目录名之间必须只有一个斜杠 '/' 。
  • 最后一个目录名(如果存在)不能 以 '/' 结尾。
  • 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。

返回简化后得到的 规范路径 。

示例 1:

输入:path = "/home/"
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。 

示例 2:

输入:path = "/../"
输出:"/"
解释:从根目录向上一级是不可行的,因为根目录是你可以到达的最高级。

示例 3:

输入:path = "/home//foo/"
输出:"/home/foo"
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。

示例 4:

输入:path = "/a/./b/../../c/"
输出:"/c"

提示:

  • 1 <= path.length <= 3000
  • path 由英文字母,数字,'.''/' 或 '_' 组成。
  • path 是一个有效的 Unix 风格绝对路径。

方法2:(1ms)

    public String simplifyPath(String path) {String[] arr = new String[path.length()];int index = 0,i=0;while (index < path.length()) {while (index < path.length() && path.charAt(index) == '/') {index++;}if (index == path.length()) break;int start = index;while (index < path.length() && path.charAt(index) != '/') {index++;}String s = path.substring(start,index);if ("..".equals(s)) {if (i > 0) {i--;}}else if (!".".equals(s)) {arr[i++] = s;}}StringBuilder sb = new StringBuilder();for (int j = 0; j < i; j++) {sb.append("/").append(arr[j]);}return sb.length() == 0 ? "/" : sb.toString();}

方法3:(3ms)

    public String simplifyPath(String path) {Deque<String> deque = new LinkedList<>();int n = path.length();int start = 0, end = 1;while (end < n) {while (end < n && path.charAt(end) != '/') {end++;}String subString = path.substring(start, end);//认为是空目录if (subString.equals("/")) {start = end;end++;continue;}//当前目录if (subString.equals("/.")) {start = end;end++;continue;}//if (subString.equals("/..")) {if(!deque.isEmpty()) {deque.pollLast();}start = end;end++;continue;}deque.offerLast(subString.substring(1));start = end;end++;}StringBuffer stringBuffer = new StringBuffer();for (String s : deque) {stringBuffer.append("/");stringBuffer.append(s);}return stringBuffer.length() == 0 ? "/" : stringBuffer.toString();}

方法4:(8ms)

    public String simplifyPath(String path) {Deque<String> stack = new LinkedList<>();for (String item : path.split("/")) {if (item.equals("..")) {if (!stack.isEmpty()) stack.pop();} else if (!item.isEmpty() && !item.equals(".")) stack.push(item);}String res = "";for (String d : stack) res = "/" + d + res;return res.isEmpty() ? "/" : res;  }

54. 最小栈 ② ×

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。

示例 1:

输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]输出:
[null,null,null,null,-3,null,0,-2]解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.

提示:

  • -231 <= val <= 231 - 1
  • poptop 和 getMin 操作总是在 非空栈 上调用
  • pushpoptop, and getMin最多被调用 3 * 104 次

方法2(4ms)

    // 数组栈, [当前值, 当前最小值]private Stack<int[]> stack = new Stack<>();public MinStack() {}public void push(int x) {if (stack.isEmpty()){stack.push(new int[]{x, x});}else {stack.push(new int[]{x, Math.min(x, stack.peek()[1])});}}public void pop() {stack.pop();}public int top() {return stack.peek()[0];}public int getMin() {return stack.peek()[1];}

方法3 :(6ms) 

    private Node head;public void push(int x) {if(head == null) head = new Node(x, x);else head = new Node(x, Math.min(x, head.min), head);}public void pop() {head = head.next;}public int top() {return head.val;}public int getMin() {return head.min;}private class Node {int val;int min;Node next;private Node(int val, int min) {this(val, min, null);}private Node(int val, int min, Node next) {this.val = val;this.min = min;this.next = next;}}

55. 逆波兰表达式求值 ② √-

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

注意:

  • 有效的算符为 '+''-''*' 和 '/' 。
  • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
  • 两个整数之间的除法总是 向零截断 。
  • 表达式中不含除零运算。
  • 输入是一个根据逆波兰表示法表示的算术表达式。
  • 答案及所有中间计算结果可以用 32 位 整数表示。

示例 1:

输入:tokens = ["2","1","+","3","*"]
输出:9
解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9

示例 2:

输入:tokens = ["4","13","5","/","+"]
输出:6
解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6

示例 3:

输入:tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]
输出:22
解释:该算式转化为常见的中缀算术表达式为:((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22

方法1:(18ms)

    public static int evalRPN(String[] tokens) {Stack<String> stack = new Stack<>();for (int i = 0; i < tokens.length; i++) {String token = tokens[i];if (stack.size() == 0 ||token.matches("\\d+") || (token.charAt(0) == '-' && token.length() > 1)){stack.add(token);}else {int num2 = Integer.parseInt(stack.pop());int num1 = Integer.parseInt(stack.pop());int res = cal(num1, num2, token);stack.push(res + "");}}return Integer.parseInt(stack.peek());}public static int cal(int num1, int num2, String ope){int res = 0;switch (ope){case "+":res = num1 + num2;break;case "-":res = num1 - num2;break;case "*":res = num1 * num2;break;case "/":res = num1 / num2;break;}return res;}}

56. 基本计算器 ③
 

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

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

相关文章

外键约束

目录 外键约束 对数据表进行初期设计&#xff0c;暂时不使用外键 验证限制三 验证级联删除 设置级联更新 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 外键约束 外键约束主要是在父子表关系中体现的一种约束操作。…

matlab 基于小波变换的油气管道泄露信号检测

1、内容简介 略 71-可以交流、咨询、答疑 基于小波变换的油气管道泄露信号检测 去噪、小波变换、油气管道泄露、信号检测 2、内容说明 摘 要&#xff1a; 油气管道泄漏会造成严重危害&#xff0c;因此&#xff0c;亟需寻找一种能快速检测油气管道信号的技术。传统的 傅里…

Java多线程实战-CompletableFuture异步编程优化查询接口响应速度

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️本系列源码仓库&#xff1a;多线程并发编程学习的多个代码片段(github) &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正…

远程桌面安卓版下载 安卓远程控制免费版

远程桌面安卓版下载与安卓远程控制免费版的应用解析 随着移动互联网的快速发展&#xff0c;远程桌面应用逐渐成为了许多用户、特别是技术爱好者和商务人士的必备工具。它们不仅可以在电脑上实现远程控制&#xff0c;还能将这种功能延伸到移动设备上&#xff0c;如安卓手机和平…

R语言中的常用基础绘图函数 直方图,箱线图,条形图,散点图

目录 R语言中的绘图参数 绘图函数 1.plot函数绘制散点图 2.hist函数绘制直方图 如何修饰直方图? 如何在直方图上标注各组频数&#xff1f; 使用text函数把某些信息标注在直方图上 如何在直方图上添加概率密度曲线&#xff1f; 3.boxplot函数绘制箱线图 4.barplot函数…

一、MySQL基础学习

目录 1、MySQL启动2、MySQL客户端连接3、SQL3.1、SQL语句分类3.2、DDL&#xff08;数据库定义语言&#xff09;3.2.1、操作数据库3.2.2、操作数据表 3.3、DML&#xff08;数据库操作语言&#xff09;3.3.1、增加 insert into3.3.2、删除 delete3.3.3、修改 update 3.4、DQL&…

idea error java:compilation failed:internal java compiler error

idea中编译运行maven项目报错如下 idea error java:compilation failed:internal java compiler error 尝试如下操作 注意&#xff1a;jdk8 需要设置4个地方 1.首先打开File->Project Structure中的Project&#xff0c;将SDK和language level都设置一致&#xff0c;如下…

Jackson 2.x 系列【4】对象映射器 ObjectMapper

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.0.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 概述2. 案例演示2.1 创建对象2.2 写入2.3 读取 3. 泛型擦除 1. 概述 在前两篇文…

IO多分复用

#include<myhead.h> #define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.65.131" //服务器IPint main(int argc, const char *argv[]) {//1、创建一个套接字int sfd -1;sfd socket(AF_INET, SOCK_STREAM, 0); //参数1&#xff1a;…

北斗卫星引领农机春耕新时代

北斗卫星引领农机春耕新时代 随着现代科技的快速发展&#xff0c;北斗卫星成为了农业领域不可或缺的利器。在农机自动驾驶系统的引领下&#xff0c;农机正逐渐实现自主操作&#xff0c;为农民节省了大量的时间和精力&#xff0c;并最大限度地提高了农作物的产量和质量。 北斗…

30天拿下Rust之错误处理

概述 在软件开发领域&#xff0c;对错误的妥善处理是保证程序稳定性和健壮性的重要环节。Rust作为一种系统级编程语言&#xff0c;以其对内存安全和所有权的独特设计而著称&#xff0c;其错误处理机制同样体现了Rust的严谨与实用。在Rust中&#xff0c;错误处理通常分为两大类&…

词令微信小程序怎么添加到我的小程序?

微信小程序怎么添加到我的小程序&#xff1f; 1、找到并打开要添加的小程序&#xff1b; 2、打开小程序后&#xff0c;点击右上角的「…」 3、点击后底部弹窗更多选项&#xff0c;请找到并点击「添加到我的小程序」&#xff1b; 4、添加成功后&#xff0c;就可以在首页下拉我的…

迈入编程世界:C 语言初体验

写在前面&#xff1a;OK啊&#xff0c;前面我们介绍了C语言开发环境的搭建&#xff0c;今天我们再来初步的认识一下C语言&#xff0c;了解C语言的基础框架、数据的表现形式以及输入和输出。 文章特点&#xff1a;不会很正经&#xff0c;不会很学术&#xff0c;不会很理论&#…

J4G企业通讯ip电话 sip对讲主机 停车场对讲主机

J4G企业通讯ip电话 sip对讲主机 停车场对讲主机 SV-J4G 是一款企业级彩屏网络电话&#xff0c;具有高清语音&#xff0c;320x240 2.8英寸彩屏&#xff0c;支持千兆以太网&#xff0c;12个SIP账号&#xff0c;支持PoE供电&#xff0c;支持外接EHS无线耳机&#xff0c;三方电话会…

C++有关内存的那些事

个人主页&#xff1a;PingdiGuo_guo 收录转栏&#xff1a;C干货专栏 前言 本篇博客是讲解关于C内存的一些知识点的。 文章目录 前言 1.内存函数 1.1memcpy函数 1.2memmove函数 1.3 memset函数 2.各数据类型占用 2.1bool类型 2.2char类型 2.3short、int、long类型及整数…

京东商品信息采集API商品价格商品详情图主图抓取接口key(提供测试入口)

item_get 获得JD商品详情item_search 按关键字搜索商品item_search_img 按图搜索京东商品&#xff08;拍立淘&#xff09;item_search_shop 获得店铺的所有商品item_history_price 获取商品历史价格信息item_recommend 获取推荐商品列表buyer_order_list 获取购买到的商品订单列…

CMake笔记之GLOB和GLOB_RECURSE的使用方法

CMake笔记之GLOB和GLOB_RECURSE的使用方法 —— 杭州 2024-03-19 夜 文章目录 CMake笔记之GLOB和GLOB_RECURSE的使用方法1.GLOB使用方法2.GLOB对比GLOB_RECURSE 1.GLOB使用方法 在 CMake 中&#xff0c;file(GLOB ...) 命令用于将匹配特定模式的文件列表赋值给变量。这可以用…

MySQL中replace into详解、批量更新、不存在插入存在则更新、replace into的坑

文章目录 一、replace into原理二、replace into的三种形式三、replace into 使用案例3.1、replace into values3.1.1、只有主键且主键冲突3.1.2、有主键有唯一索引且主键冲突3.1.3、有主键有唯一索引且唯一索引冲突(有坑)3.1.4、有主键有唯一索引且与一条主键冲突与另一条唯一…

瑞_Redis_短信登录_基于Session实现登录流程

文章目录 项目介绍1 短信登录1.1 项目准备1.2 基于Session实现登录流程1.2.1 功能流程介绍1.2.1.1 发送短信验证码1.2.1.2 短信验证码登录、注册1.2.1.3 校验登录状态 1.2.2 实现发送短信验证码功能1.2.2.1 页面流程1.2.2.2 代码实现1.2.2.3 测试 1.2.3 实现短信验证码登录、注…

2024年蓝牙耳机哪个好?真人实测告诉你如何选购,避免后悔!

在繁忙的通勤途中&#xff0c;无线蓝牙耳机已成为我们摆脱线缆束缚、享受音乐的理想选择。面对众多品牌和型号&#xff0c;选择合适的耳机似乎并不简单。因此&#xff0c;我精心挑选了几款表现不错的蓝牙耳机&#xff0c;希望我的分享能为你提供有价值的参考。 一、如何挑选蓝牙…