leetCode热题21-26 解题代码,调试代码和思路
前言
本文属于特定的六道题目题解和调试代码。
1 ✔ [160]相交链表 Easy 2023-03-17 171
2 ✔ [54]螺旋矩阵 Medium 2023-03-17 169
3 ✔ [23]合并K个排序链表 Hard 2022-12-08 158
4 ✔ [92]反转链表 II Medium 2023-03-01 155
5 ✔ [415]字符串相加 Easy 2023-03-14 150
6 ✔ [142]环形链表 II Medium 2022-09-27 144
正所谓磨刀不误砍柴功。下面我做这几篇文档对于涉及的题型或者数据结构的分析都很有帮助,贴出来仅供参考。
如何调试递归程序,有何技巧?
按照树形结构直观地打印出一棵二叉树、快速创建leetcode中树的结构(Java)
leetCode热题21-26 解题代码,调试代码和思路
- 前言
- 1 ✔ [160]相交链表 Easy 2023-03-17 171
- 2 ✔ [54]螺旋矩阵 Medium 2023-03-17 169
- 3 ✔ [23]合并K个排序链表 Hard 2022-12-08 158
- 4 ✔ [92]反转链表 II Medium 2023-03-01 155
- 5 ✔ [415]字符串相加 Easy 2023-03-14 150
- 6 ✔ [142]环形链表 II Medium 2022-09-27 144
1 ✔ [160]相交链表 Easy 2023-03-17 171
//给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
//
// 图示两个链表在节点 c1 开始相交:
//
//
//
// 题目数据 保证 整个链式结构中不存在环。
//
// 注意,函数返回结果后,链表必须 保持其原始结构 。
//
// 自定义评测:
//
// 评测系统 的输入如下(你设计的程序 不适用 此输入):
//
//
// intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0
// listA - 第一个链表
// listB - 第二个链表
// skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数
// skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数
//
//
// 评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视
//作正确答案 。
//
//
//
// 示例 1:
//
//
//
//
//输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2,
//skipB = 3
//输出:Intersected at ‘8’
//解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。
//从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。
//在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。
//— 请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内
//存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A 中第三个节点,B 中第四个节点) 在内存中指向相同的位置。
//
//
//
//
// 示例 2:
//
//
//
//
//输入:intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB =
//1
//输出:Intersected at ‘2’
//解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。
//从各自的表头开始算起,链表 A 为 [1,9,1,2,4],链表 B 为 [3,2,4]。
//在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。
//
//
// 示例 3:
//
//
//
//
//输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
//输出:null
//解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。
//由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。
//这两个链表不相交,因此返回 null 。
//
//
//
//
// 提示:
//
//
// listA 中节点数目为 m
// listB 中节点数目为 n
// 1 <= m, n <= 3 * 10⁴
// 1 <= Node.val <= 10⁵
// 0 <= skipA <= m
// 0 <= skipB <= n
// 如果 listA 和 listB 没有交点,intersectVal 为 0
// 如果 listA 和 listB 有交点,intersectVal == listA[skipA] == listB[skipB]
//
//
//
//
// 进阶:你能否设计一个时间复杂度 O(m + n) 、仅用 O(1) 内存的解决方案?
//
// Related Topics 哈希表 链表 双指针 👍 2020 👎 0
引用一下leetcode上对着道题目的神评论:走到尽头见不到你,于是走过你来时的路,等到相遇时才发现,你也走过我来时的路。
思路: 如果两个链表A B长度相等,两个指针a b 分别中A B的开头开始同步遍历,判断如果a b指向同一个节点,则相交,否者 两个指针同时走到结尾null,返回null即可。
那么如何保证A B长度相等或者消除它们之间的长度差?
通过 a b指针同时遍历,如果a走到头,这a再从B链表的开头开始走。这个时候a和b之间的距离就是A链表的长度,然后继续遍历直到b也走到尽头。这个时候a在B链表上到结尾的长度,和从A链表开始到结尾的长度相等。
然后让b从A链表的开头开始走,如果a 和b相等,这为相交的点。如果到尽头都没有相等,那么这个时候两个指针同时到尽头都等于null,也是相等,直接结束循环 返回null。
自测代码
public class P160_IntersectionOfTwoLinkedLists{public static void main(String[] args) {//测试代码Solution solution = new P160_IntersectionOfTwoLinkedLists().new Solution();ListNode listNode = new ListNode("[1,3,5,7,9,11,13,15,17,19,21]");ListNode listNode1 = new ListNode("[2,1]");System.out.println(solution.getIntersectionNode(listNode, listNode1));}//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val = x;* next = null;* }* }*/
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode a = headA;ListNode b = headB;while (a != b){a = a == null ? headB : a.next;b = b == null ? headA : b.next;}return a;}
}
//leetcode submit region end(Prohibit modification and deletion)}
提交代码
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode a = headA;ListNode b = headB;while (a != b){a = a == null ? headB : a.next;b = b == null ? headA : b.next;}return a;}
}
2 ✔ [54]螺旋矩阵 Medium 2023-03-17 169
//给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
//
//
//
// 示例 1:
//
//
//输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
//输出:[1,2,3,6,9,8,7,4,5]
//
//
// 示例 2:
//
//
//输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
//输出:[1,2,3,4,8,12,11,10,9,5,6,7]
//
//
//
//
// 提示:
//
//
// m == matrix.length
// n == matrix[i].length
// 1 <= m, n <= 10
// -100 <= matrix[i][j] <= 100
//
//
// Related Topics 数组 矩阵 模拟 👍 1329 👎 0
纯手敲判断,
评论区一定会有更好的办法,这个时候我也纠结,到底应该去看最好的方法还是按照自己的思路做下去。(大人应该全都要吧 哈哈,不过我做出来就不想再去看别的方法了哎)
到底哪种收获更大?
自测代码
public class P54_SpiralMatrix{public static void main(String[] args) {//测试代码Solution solution = new P54_SpiralMatrix().new Solution();Integer[][] integers = ArrayUtil.StrToIntegerArray("[[2,3]]");List<Integer> integers1 = solution.spiralOrder(integers);System.out.println(PrintData.printArrayListToStrArray(integers1));}//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {public List<Integer> spiralOrder(Integer[][] matrix) {if (matrix == null) {return null;}int len = matrix.length;int length = matrix[0].length;ArrayList<Integer> res = new ArrayList<>();int x = 0;int y = 0;String direction = "右";while (true){res.add(matrix[x][y]);matrix[x][y] = 111;switch (direction){case "右" : {if (y+1 < length && matrix[x][y+1] != 111) {y++;}else if(x+1 <len && matrix[x+1][y] != 111){direction = "下";x++;}else {return res;}break;}case "下" : {if (x+1 < len && matrix[x+1][y] != 111 ) {x++;}else if (y-1 >= 0 && matrix[x][y-1] != 111){y--;direction = "左";}else {return res;}break;}case "左" : {if (0 <= y-1 && matrix[x][y-1] != 111 ) {y--;}else if (x-1 >= 0 && matrix[x-1][y] != 111){x--;direction = "上";}else {return res;}break;}case "上" : {if (0 <= x-1 && matrix[x-1][y] != 111 ) {x--;}else if (y+1 < length && matrix[x][y+1] != 111){y++;direction = "右";}else {return res;}break;}}}}
}
//leetcode submit region end(Prohibit modification and deletion)}
提交代码
class Solution {public List<Integer> spiralOrder(int[][] matrix) {if (matrix == null) {return null;}int len = matrix.length;int length = matrix[0].length;ArrayList<Integer> res = new ArrayList<>();int x = 0;int y = 0;String direction = "右";while (true){res.add(matrix[x][y]);matrix[x][y] = 111;switch (direction){case "右" : {if (y+1 < length && matrix[x][y+1] != 111) {y++;}else if(x+1 <len && matrix[x+1][y] != 111){direction = "下";x++;}else {return res;}break;}case "下" : {if (x+1 < len && matrix[x+1][y] != 111 ) {x++;}else if (y-1 >= 0 && matrix[x][y-1] != 111){y--;direction = "左";}else {return res;}break;}case "左" : {if (0 <= y-1 && matrix[x][y-1] != 111 ) {y--;}else if (x-1 >= 0 && matrix[x-1][y] != 111){x--;direction = "上";}else {return res;}break;}case "上" : {if (0 <= x-1 && matrix[x-1][y] != 111 ) {x--;}else if (y+1 < length && matrix[x][y+1] != 111){y++;direction = "右";}else {return res;}break;}}}}
}
3 ✔ [23]合并K个排序链表 Hard 2022-12-08 158
//给你一个链表数组,每个链表都已经按升序排列。
//
// 请你将所有链表合并到一个升序链表中,返回合并后的链表。
//
//
//
// 示例 1:
//
// 输入:lists = [[1,4,5],[1,3,4],[2,6]]
//输出:[1,1,2,3,4,4,5,6]
//解释:链表数组如下:
//[
// 1->4->5,
// 1->3->4,
// 2->6
//]
//将它们合并到一个有序链表中得到。
//1->1->2->3->4->4->5->6
//
//
// 示例 2:
//
// 输入:lists = []
//输出:[]
//
//
// 示例 3:
//
// 输入:lists = [[]]
//输出:[]
//
//
//
//
// 提示:
//
//
// k == lists.length
// 0 <= k <= 10^4
// 0 <= lists[i].length <= 500
// -10^4 <= lists[i][j] <= 10^4
// lists[i] 按 升序 排列
// lists[i].length 的总和不超过 10^4
//
//
// Related Topics 链表 分治 堆(优先队列) 归并排序 👍 2370 👎 0
自测代码
public class P23_MergeKSortedLists{public static void main(String[] args) {//测试代码Solution solution = new P23_MergeKSortedLists().new Solution();ListNode[] listNodes = ListNode.strToListNodeArray("[[1,4,5],[1,3,4],[2,6]]");ListNode listNode = solution.mergeKLists(listNodes);System.out.println(listNode.toString());}//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode mergeKLists(ListNode[] lists) {if (lists.length == 0) {return null;}int l = 0 ;int r = lists.length-1;while (l != r || r != 0){if (l >= r) {l = 0;continue;}lists[l] = mergeKList(lists[l],lists[r]);l++;r--;}return lists[0];}public ListNode mergeKList(ListNode firster ,ListNode end ) {ListNode heart = new ListNode(0);ListNode mid = heart;while ( firster != null || end != null){if (firster == null) {mid.next = end;return heart.next;}if (end == null) {mid.next = firster;return heart.next;}if (firster.val < end.val) {mid.next = firster;firster = firster.next;}else {mid.next = end;end = end.next;}mid = mid.next;}return heart.next;}}
//leetcode submit region end(Prohibit modification and deletion)}
提交代码
class Solution {public ListNode mergeKLists(ListNode[] lists) {if (lists.length == 0) {return null;}int l = 0 ;int r = lists.length-1;while (l != r || r != 0){if (l >= r) {l = 0;continue;}lists[l] = mergeKList(lists[l],lists[r]);l++;r--;}return lists[0];}public ListNode mergeKList(ListNode firster ,ListNode end ) {ListNode heart = new ListNode(0);ListNode mid = heart;while ( firster != null || end != null){if (firster == null) {mid.next = end;return heart.next;}if (end == null) {mid.next = firster;return heart.next;}if (firster.val < end.val) {mid.next = firster;firster = firster.next;}else {mid.next = end;end = end.next;}mid = mid.next;}return heart.next;}}
4 ✔ [92]反转链表 II Medium 2023-03-01 155
//给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链
//表节点,返回 反转后的链表 。
//
//
//
// 示例 1:
//
//
//输入:head = [1,2,3,4,5], left = 2, right = 4
//输出:[1,4,3,2,5]
//
//
// 示例 2:
//
//
//输入:head = [5], left = 1, right = 1
//输出:[5]
//
//
//
//
// 提示:
//
//
// 链表中节点数目为 n
// 1 <= n <= 500
// -500 <= Node.val <= 500
// 1 <= left <= right <= n
//
//
//
//
// 进阶: 你可以使用一趟扫描完成反转吗?
//
// Related Topics 链表 👍 1523 👎 0
关于链表很经典的一道题目
解题思路大致分为两步,第一先找到所有特殊的点,比如要旋转的开头和结尾,前半部分的开头和结尾,后半部分的结尾, 找到之后拼接就可以
第二部分就是 将旋转部分 旋转,这个可以看看旋转列表,很简单的思路,直接旋转,然后各个节点拼接,思路还是比较清晰的
自测代码
public class P92_ReverseLinkedListIi{public static void main(String[] args) {//测试代码Solution solution = new P92_ReverseLinkedListIi().new Solution();ListNode listNode = new ListNode("[1,2,3,4,5]");/*旋转链表*/ListNode l = null;ListNode r = listNode;// ListNode temp= null;
// while (r != null) {
// temp = r.next;
// r.next = l;
// l = r;
// r = temp;
// }
// System.out.println(l.toString());System.out.println(solution.reverseBetween(listNode,2,4).toString());}//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {
//输入:head = [1,2,3,4,5], left = 2, right = 4
//输出:[1,4,3,2,5]ListNode heart = new ListNode(0);/*排序完成后的开头*/heart.next = head;/*排序完成后的中间旋转位置前端的结尾*/ListNode heartEnd = heart;/*排序完成后的中间旋转部分结尾*/ListNode midEnd ;/*排序完成后的中间旋转部分开头*/ListNode midHeart = null ;/*排序完成后的中间旋转部分后面的开头*/ListNode end = heart ;for (int i = 0; i < left-1; i++) {head = head.next;heartEnd = heartEnd.next;}midEnd = heartEnd.next;midHeart = midEnd;end = midHeart.next;ListNode temp= null;for (int i = 0; i < right-left ; i++) {temp = end.next;end.next = midHeart ;midHeart = end;end = temp;}heartEnd.next = midHeart;midEnd.next = end;return heart.next;}
}
//leetcode submit region end(Prohibit modification and deletion)}
提交代码
class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {
//输入:head = [1,2,3,4,5], left = 2, right = 4
//输出:[1,4,3,2,5]ListNode heart = new ListNode(0);/*排序完成后的开头*/heart.next = head;/*排序完成后的中间旋转位置前端的结尾*/ListNode heartEnd = heart;/*排序完成后的中间旋转部分结尾*/ListNode midEnd ;/*排序完成后的中间旋转部分开头*/ListNode midHeart = null ;/*排序完成后的中间旋转部分后面的开头*/ListNode end = heart ;for (int i = 0; i < left-1; i++) {head = head.next;heartEnd = heartEnd.next;}midEnd = heartEnd.next;midHeart = midEnd;end = midHeart.next;ListNode temp= null;for (int i = 0; i < right-left ; i++) {temp = end.next;end.next = midHeart ;midHeart = end;end = temp;}heartEnd.next = midHeart;midEnd.next = end;return heart.next;}
}
5 ✔ [415]字符串相加 Easy 2023-03-14 150
//给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
//
// 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
//
//
//
// 示例 1:
//
//
//输入:num1 = “11”, num2 = “123”
//输出:“134”
//
//
// 示例 2:
//
//
//输入:num1 = “456”, num2 = “77”
//输出:“533”
//
//
// 示例 3:
//
//
//输入:num1 = “0”, num2 = “0”
//输出:“0”
//
//
//
//
//
//
// 提示:
//
//
// 1 <= num1.length, num2.length <= 10⁴
// num1 和num2 都只包含数字 0-9
// num1 和num2 都不包含任何前导零
//
//
// Related Topics 数学 字符串 模拟 👍 696 👎 0
自测代码
public class P415_AddStrings{public static void main(String[] args) {//测试代码Solution solution = new P415_AddStrings().new Solution();solution.addStrings("584","18");}//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {public String addStrings(String num1, String num2) {int len = num1.length();int len2 = num2.length();int sgin = 0;StringBuffer stringBuffer = new StringBuffer();while (len>0||len2>0){if (len <= 0) {int i = Integer.parseInt(String.valueOf(num2.charAt(--len2)));stringBuffer.append( (i +sgin) %10 ) ;sgin = (i +sgin) /10;continue;}if (len2 <= 0) {int i = Integer.parseInt(String.valueOf(num1.charAt(--len)));stringBuffer.append( (i +sgin) %10 ) ;sgin = (i +sgin) /10;continue;}char c = num1.charAt(--len);int int1 = Integer.parseInt(String.valueOf(c));int int2 = Integer.parseInt(String.valueOf(num2.charAt(--len2)));stringBuffer.append( (int1+int2+sgin)%10 );sgin = (int1+int2+sgin)/10;}if (1 == sgin) {stringBuffer.append(sgin);}return stringBuffer.reverse().toString();}
}
//leetcode submit region end(Prohibit modification and deletion)}
提交代码
class Solution {public String addStrings(String num1, String num2) {int len = num1.length();int len2 = num2.length();int sgin = 0;StringBuffer stringBuffer = new StringBuffer();while (len>0||len2>0){if (len <= 0) {int i = Integer.parseInt(String.valueOf(num2.charAt(--len2)));stringBuffer.append( (i +sgin) %10 ) ;sgin = (i +sgin) /10;continue;}if (len2 <= 0) {int i = Integer.parseInt(String.valueOf(num1.charAt(--len)));stringBuffer.append( (i +sgin) %10 ) ;sgin = (i +sgin) /10;continue;}char c = num1.charAt(--len);int int1 = Integer.parseInt(String.valueOf(c));int int2 = Integer.parseInt(String.valueOf(num2.charAt(--len2)));stringBuffer.append( (int1+int2+sgin)%10 );sgin = (int1+int2+sgin)/10;}if (1 == sgin) {stringBuffer.append(sgin);}return stringBuffer.reverse().toString();}
}
6 ✔ [142]环形链表 II Medium 2022-09-27 144
//给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
//
// 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到
//链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
//
// 不允许修改 链表。
//
//
//
//
//
//
// 示例 1:
//
//
//
//
//输入:head = [3,2,0,-4], pos = 1
//输出:返回索引为 1 的链表节点
//解释:链表中有一个环,其尾部连接到第二个节点。
//
//
// 示例 2:
//
//
//
//
//输入:head = [1,2], pos = 0
//输出:返回索引为 0 的链表节点
//解释:链表中有一个环,其尾部连接到第一个节点。
//
//
// 示例 3:
//
//
//
//
//输入:head = [1], pos = -1
//输出:返回 null
//解释:链表中没有环。
//
//
//
//
// 提示:
//
//
// 链表中节点的数目范围在范围 [0, 10⁴] 内
// -10⁵ <= Node.val <= 10⁵
// pos 的值为 -1 或者链表中的一个有效索引
//
//
//
//
// 进阶:你是否可以使用 O(1) 空间解决此题?
//
// Related Topics 哈希表 链表 双指针 👍 2022 👎 0
[160]相交链表 Easy 2023-03-17 171 这道题那个题解思路的解释:
走到尽头见不到你,于是走过你来时的路,等到相遇时才发现,你也走过我来时的路。
让我对链表相关的题目都有了很深的印象,基本都是找关键节点,快慢指针,旋转链表
这几个解决思路
自测代码
public class P142_LinkedListCycleIi{public static void main(String[] args) {//测试代码Solution solution = new P142_LinkedListCycleIi().new Solution();ListNode listNode = new ListNode("[1]");
// listNode.next.next = listNode;System.out.println(solution.detectCycle(listNode).toString());}//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
/*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val = x;* next = null;* }* }*/
public class Solution {public ListNode detectCycle(ListNode head) {if (head == null) {return null;}ListNode res = head;ListNode l = res;while (res !=null && res.next != null){res = res.next.next;l = l.next;if (res == l) {res = head;while (true){if (res == l) {return res;}res = res.next;l = l.next;}}}return null;}
}
//leetcode submit region end(Prohibit modification and deletion)}
提交代码
public class Solution {public ListNode detectCycle(ListNode head) {if (head == null) {return null;}ListNode res = head;ListNode l = res;while (res !=null && res.next != null){res = res.next.next;l = l.next;if (res == l) {res = head;while (true){if (res == l) {return res;}res = res.next;l = l.next;}}}return null;}
}
相关文章:
leetCode热题21-26 解题代码,调试代码和思路
前言 本文属于特定的六道题目题解和调试代码。 1 ✔ [160]相交链表 Easy 2023-03-17 171 2 ✔ [54]螺旋矩阵 Medium 2023-03-17 169 3 ✔ [23]合并K个排序链表 Hard 2022-12-08 158 4 ✔ [92]反转链表 II Medium 2023-03-01 155 5 ✔ [415]字符串相加 Easy 2023-03-14 150 6 …...

ChatGPT推出第四代GPT-4!不仅能聊天,还可以图片创作!
3月15日凌晨,OpenAI震撼发布了多模态预训练大模型 GPT-4。 根据官网发布的通告可以知道,GPT-4 实现了以下几个方面的飞跃式提升:强大的AI创作识图能力;文字输入限制提升至 2.5 万字;回答准确性显著提高;能够…...

二叉搜索树:AVL平衡
文章目录一、 二叉搜索树1.1 概念1.2 操作1.3 代码实现二、二叉搜索树的应用K模型和KV模型三、二叉搜索树的性能分析四、AVL树4.1 AVL树的概念4.2 AVL树的实现原理4.3 旋转4.4 AVL树最终代码一、 二叉搜索树 1.1 概念 二叉搜索树( Binary Search Tree,…...

数据结构和算法(1):数组
目录概述动态数组二维数组局部性原理越界检查概述 定义 在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识 In computer science, an array is a data structure consisting of a col…...

python+django+vue全家桶鲜花商城售卖系统
重点: (1) 网上花店网站中各模块功能之间的的串联。 (2) 网上花店网站前台与后台的连接与同步。 (3) 鲜花信息管理模块中鲜花的发布、更新与删除。 (4) 订单…...

一文带你领略 WPA3-SAE 的 “安全感”
引入 WPA3-SAE也是针对四次握手的协议。 四次握手是 AP (authenticator) 和 (supplicant)进行四次信息交互,生成一个用于加密无线数据的秘钥。 这个过程发生在 WIFI 连接 的 过程。 为了更好的阐述 WPA3-SAE 的作用 …...
Python解题 - CSDN周赛第38期
又来拯救公主了。。。本期四道题还是都考过,而且后面两道问哥在以前写的题解里给出了详细的代码(当然是python版),直接复制粘贴就可以过了——尽管这样显得有失公允,考虑到以后还会出现重复的考题,所以现在…...

Android绘制——自定义view之onLayout
简介 在自定义view的时候,其实很简单,只需要知道3步骤: 测量——onMeasure():决定View的大小,关于此请阅读《Android自定义控件之onMeasure》布局——onLayout():决定View在ViewGroup中的位置绘制——onD…...

用Qt画一个温度计
示例1 以下是用Qt绘制一个简单的温度计的示例代码: #include <QPainter> #include <QWidget> #include <QApplication> class Thermometer : public QWidget { public:Thermometer(QWidget *parent 0); protected:void paintEvent(QPaintEvent …...

Java设计模式 04-建造者模式
建造者模式 一、 盖房项目需求 1)需要建房子:这一过程为打桩、砌墙、封顶 2)房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的. 3)请编写程序,完成需求. …...
安语未公告于2023年3月20日发布
因一些特殊原因,凡事都是有开始,高潮和结束三大过程,做出以下决定: 所有对 安语未文章 为之热爱、鞭策、奉献,和支持过的开发者: 注:所有资源以及资料都会正常下载和查看 如需联系࿱…...

进销存是什么?如何选择进销存系统?
什么是进销存?进销存软件概念起源于上世纪80年代,由于电算化的普及,计算机管理的推广,不少企业对于仓库货品的进货,存货,出货管理,有了强烈的需求,进销存软件的发展从此开始。 进入…...
基于BP神经网络的图像跟踪,基于BP神经网络的细胞追踪识别
目录 摘要 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络激活函数及公式 基于BP神经网络的细胞识别追踪 matab编程代码 效果 结果分析 展望 摘要 智能驾驶,智能出行是现代社会发展的趋势之一,其中,客量预测对智能出行至关重要,…...

Java面试总结篇
引用介绍 1.线程安全不安全的概念 线程安全: 指多个线程在执行同一段代码的时候采用加锁机制,使每次的执行结果和单线程执行的结果都是一样的,不存在执行程序时出现意外结果。 线程不安全: 是指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得到的数据是脏…...

100天精通Python(可视化篇)——第80天:matplotlib绘制不同种类炫酷柱状图代码实战(簇状、堆积、横向、百分比、3D柱状图)
文章目录0. 专栏导读1. 普通柱状图2. 簇状柱形图3. 堆积柱形图4. 横向柱状图5. 横向双向柱状图6. 百分比堆积柱形图7. 3D柱形图8. 3D堆积柱形图9. 3D百分比堆积柱形图0. 专栏导读 🏆🏆作者介绍:Python领域优质创作者、CSDN/华为云/阿里云/掘金…...

【Java】UDP网络编程
文章目录前言DatagramSocketDatagramPacket注意事项与区别代码演示前言 UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层。 UDP是面向非连接的协议,它不与对方建立连接,而是直接把我要发的数据报发给对…...

Springboot源代码总结
前言 编写微服务,巩固知识 文章目录 前言springboot原理springboot启动流程SpringBoot自动配置底层源码解析自动配置到底配了什么?自动配置类条件注解Starter机制@ConditionalOnMissingBeanSpringBoot启动过程源码解析构造SpringApplication对象SpringBoot完整的配置优先级s…...

JVM监控搭建
文章目录JVM监控搭建整体架构JolokiaTelegrafInfluxdbGrafanaJVM监控搭建 整体架构 JVM 的各种内存信息,会通过 JMX 接口进行暴露。 Jolokia 组件负责把 JMX 信息翻译成容易读取的 HTTP 请求。Telegraf 组件作为一个通用的监控 agent,和 JVM 进程部署在…...
java中如何优化大量的if...else...
目录 策略模式(Strategy Pattern) 工厂模式(Factory Pattern) 映射表(Map) 数据驱动设计(Data-Driven Design) 策略模式(Strategy Pattern) 将每个条件分…...

24. linux系统基础
两个进程间想通讯,必须要通过内核,今天讲的信号其实本质也是讲进程间通讯的意思,那么你为什么可以在shell环境下,可以和一个进程发kill-9啊? shell是不是相当于一个进程?你自己运行的那个进程是不是也相当于…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...