随笔分类 -  常用算法

算法题---二叉树层序遍历
摘要:二叉树层序遍历: class TreeNode { TreeNode left; TreeNode right; int value; } void levelTraversal(TreeNode root) { Queue<TreeNode> q = new LinkedList<>(); q.a 阅读全文
posted @ 2024-06-20 23:36 毕哥 阅读(9) 评论(0) 推荐(0) 编辑
算法题---二分查找
摘要:int binarySearch(int[] arr, int temp) { int left = 0; int right = arr.length; int occurIndex = -1; while (left <= right) { int mid = (left + right) / 阅读全文
posted @ 2024-06-20 19:54 毕哥 阅读(6) 评论(0) 推荐(0) 编辑
算法题---查找字符串是否含有子串
摘要:boolean searchChild(String str1, String str2) { int count = str1.length() - str2.length(); for (int i = 0; i < count; i++) { boolean has = true; for ( 阅读全文
posted @ 2024-06-20 19:52 毕哥 阅读(7) 评论(0) 推荐(0) 编辑
算法题---判断链表中是否有环,并找出环的入口
摘要:方案一、利用Set集合不会重复的原理 boolean judgeCycle(Node head) { Set<Node> visited = new HashSet<>(); Node node = head; while (node != null) { if (visited.contains( 阅读全文
posted @ 2024-06-20 19:50 毕哥 阅读(14) 评论(0) 推荐(0) 编辑
算法题---五个线程排序输出
摘要:1、五个线程编号1、2、3、4、5,每个线程的执行完成时间不确定,要求按照排号顺序输出各个线程的结果,并且不能等所有线程执行完毕再排序输出,比如线程2先于线程1执行完了此时还不能输出。要等线程1输出完之后才能输出,其他线程以此类推 方案一、利用所得传递,创建五把锁 lock 1、2、3、4、5,线程 阅读全文
posted @ 2024-06-20 19:19 毕哥 阅读(27) 评论(0) 推荐(0) 编辑
常见排序算法以及时间复杂度
摘要:一、冒泡排序: 冒泡排序最好的情况是一趟就排完 时间复杂度为O(n); 最坏的情况就是刚好是反序的 需要循环(n-1)趟 每趟需要循环(n-1-i)次 时间复杂度为 ((n-1)*n)/2 也就是O(n^2) 所以冒泡排序的平均时间复杂度为O(n^2); 二、选择排序: 选择排序最好、最差、平均时间 阅读全文
posted @ 2019-12-20 17:57 毕哥 阅读(846) 评论(0) 推荐(0) 编辑
整合两个有序集合 时间复杂度最小为O(n)
摘要:如果这两个集合是无序的 那么时间复杂度肯定就是O(n^2) 但是因为是有序的所以时间复杂度就可以为O(n) 直接上代码: 阅读全文
posted @ 2019-12-20 17:08 毕哥 阅读(625) 评论(0) 推荐(0) 编辑