当前位置: 首页 > news >正文

啊啊啊啊啊啊啊啊code

前序遍历和中序遍历构建二叉树

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode buildTree(int[] preorder, int[] inorder) {int preLen = preorder.length;int inLen = inorder.length;if (preLen != inLen)return null;// 创建一个哈希表用来存储中序遍历的信息,键为中序遍历的值,值为中序遍历的值的下标信息HashMap<Integer, Integer> map = new HashMap<>(preLen);for (int i = 0; i < preLen; i++)map.put(inorder[i], i);return buildTree(preorder, 0, preLen - 1,map, 0, inLen - 1);}private TreeNode buildTree(int[] preorder, int preLeft, int preRight,Map<Integer, Integer> map, int inLeft, int inRight) {if (preLeft > preRight || inLeft > inRight)return null;// 创建根节点信息int rootVal = preorder[preLeft];TreeNode root = new TreeNode(rootVal);int pIndex = map.get(rootVal);// 得到根在中序遍历中的下标信息// pIndex-1-inLeft = x-(preLeft+1)int x = pIndex - inLeft + preLeft;root.left = buildTree(preorder, preLeft + 1, x,map, inLeft, pIndex - 1);root.right = buildTree(preorder, x + 1, preRight,map, pIndex + 1, inRight);return root;}
}

旋转链表右移

class Solution {public ListNode rotateRight(ListNode head, int k) {if (k == 0 || head == null || head.next == null)return head;// 找到链表长度和末尾结点 int len = 1;ListNode iter = head;while (iter.next != null) {len++;iter = iter.next;}// 将链表团成环iter.next = head;// 找到新链表的末尾位置所在的下标int n = len - k % len;while (n-- > 0) {iter = iter.next;}// 断开链表ListNode newhead = iter.next;iter.next = null;return newhead;}
}

链表合并

/*** 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 mergeTwoLists(ListNode list1, ListNode list2) {ListNode temp = new ListNode(-1);ListNode prev = temp;   // 指向当前较小的节点while (list1 != null && list2 != null) {if (list1.val <= list2.val) {prev.next = list1;list1 = list1.next;} else {prev.next = list2;list2 = list2.next;}prev = prev.next;  // 更新指针}// 合并后list1和list2最多会有一个没合并完,直接将链表的末尾指针指向未完成合并的链表即可prev.next = (list1 == null ? list2 : list1);return temp.next;   // temp第一个节点无效,所以从next返回}}
/*** 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) {return mergeKLists(lists, 0, lists.length);}// 合并从lists[i]到lists[j-1]的数组private ListNode mergeKLists(ListNode[] lists, int i, int j) {int m = j - i;// 合并的全体范围,后续用于折半if (m == 0)return null;if(m==1)return lists[i];ListNode mergeKListsLeft = mergeKLists(lists, i, i + m / 2);  // 左边需要合并的有序ListNode mergeKListsRight = mergeKLists(lists, i + m / 2, j); // 右边需要合并的有序return mergeTwo(mergeKListsLeft, mergeKListsRight); // 将最终结果合并}private ListNode mergeTwo(ListNode list1, ListNode list2) {ListNode dummp = new ListNode(-1);ListNode prev = dummp;while (list1 != null && list2 != null) {if (list1.val <= list2.val) {prev.next = list1;list1 = list1.next;} else {prev.next = list2;list2 = list2.next;}prev = prev.next;}if (list1!= null)prev.next = list1;if (list2!= null)prev.next = list2;return dummp.next;}
}

K个一组翻折链表

/*** 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 reverseKGroup(ListNode head, int k) {// 求解链表的长度ListNode p = new ListNode(-1, head);int len=0;while (p.next != null) {len++;p = p.next;}ListNode dummy = new ListNode(0, head);ListNode p0 = dummy;ListNode pre = null;ListNode curr = head;while (len >= k) {// 每k组进行翻转for (int i = 0; i < k; i++) {ListNode next = curr.next;curr.next = pre;pre = curr;curr = next;}ListNode nxt = p0.next;p0.next.next = curr;p0.next = pre;p0 = nxt;len = len - k;}return dummy.next;}
}

合并区间

class Solution {public int[][] merge(int[][] intervals) {// 按照二维数组的第一位进行排序Arrays.sort(intervals, (p, q) -> p[0] - q[0]);// 创建一个可变数组作为结果值返回ArrayList<int[]> ans = new ArrayList<>();// 遍历排序好的每一个数组for (int[] p : intervals) {int m = ans.size();// 当前遍历到的数组的最小值<=结果数组中最后一个数组的最大值,表示有重合if (m > 0 && p[0] <= ans.get(m - 1)[1]) {ans.get(m - 1)[1] = Math.max(ans.get(m - 1)[1], p[1]);} elseans.add(p);}return ans.toArray(new int[ans.size()][]);}
}
http://www.lryc.cn/news/572459.html

相关文章:

  • 打卡Day55
  • C++实现手写strlen函数
  • LeeCode2294划分数组使最大值为K
  • SQL分片工具类
  • C#上位机通过WebApi访问WinCC
  • 图像特征检测算法ORB
  • 目标检测之YOLOV11谈谈OBB
  • 基于Uniapp+PHP的教育培训系统开发指南:网校源码实战剖析
  • 【机械视觉】Halcon—【十五、一维码(条形码)和二维码识别】
  • SpringBoot扩展——发送邮件!
  • Java求职者面试指南:Spring, Spring Boot, Spring MVC, MyBatis技术点深度解析
  • Windows 10开始菜单优化方案,如何实现Win7风格开始菜单的还原
  • 火山引擎TTS使用体验
  • 类与对象(中)(详解)
  • 多卡解决报错torch.distributed.elastic.multiprocessing.errors.ChildFailedError的问题
  • API 接口:程序世界的通用语言与交互基因
  • 【音视频】PJSIP库——示例简介、C++类说明
  • 深度学习——激活函数
  • # python正则表达式——实战学习+理论
  • 跟踪大型语言模型的思想:对语言之间共享;提前规划;cot
  • RK3588调试之旅:adbd服务配置全攻略
  • stm32之使用中断控制led灯
  • 新生活的开启:从 Trae AI 离开后的三个月
  • linux操作命令(最常用)
  • 打破物理桎梏:CAN-ETH网关如何用UDP封装重构工业网络边界
  • 大模型更重要关注工艺
  • 目标检测之YOLOV11自定义数据使用OBB训练与验证
  • Neo4j常用语法-path
  • JS红宝书笔记 8.3 继承
  • 煤矿井下Modbus转Profibus网关的传感器与PLC互联解决方案