算法
文章平均质量分 50
侠客岛主
这个作者很懒,什么都没留下…
展开
-
HashMap并发扩容死循环问题
HashMap没有使用考虑并发问题,必然是线程不安全的。HashMap1.7每一个桶使用的是单向链表实现。而扩容采取的是头插法。1.什么是头插法?链表反转的迭代写法就是经典的头插法例如链表:1——>2设反转后为:reverse=null;那么依次取链表的节点插入反转后的头部,并把当前节点赋给resvese就是头插法。下面是简要代码:class ListNode { ... public ListNode reverseNode(ListNode root){ ListNod原创 2021-04-30 12:52:14 · 661 阅读 · 0 评论 -
KMP算法next数组
private static int[] next(String p) { int[] next = new int[p.length()]; next[0] = -1; int k = -1, j = 2; while (j < p.length() - 1) { if (k == -1 || p.charAt(k) == p.charAt(j)) { k++;原创 2021-04-15 00:35:12 · 107 阅读 · 0 评论 -
二分查找法之查找值与查找值第一次与最后一次出现
三种查找的代码如下://1.查找值是否存在public static int search(int[] arr, int x) { int l = 0, r = arr.length - 1; while (l < r) { int mid = (l + r) >> 1; if (arr[mid] > x) { r = mid - 1; } el原创 2020-09-14 21:26:11 · 316 阅读 · 0 评论 -
归并排序
// 归并排序----递归 public static int[] mergeSort(int[] arr, int left, int right) { // 如果 left == right,表示数组只有一个元素,则不用递归排序 if (left < right) { // 把大的数组分隔成两个数组 int mid = (left + right) / 2; // 对左半部分...原创 2020-05-24 17:52:37 · 118 阅读 · 0 评论 -
java单链表
public class myNode { int length = 0; private Node head = new Node(); private class Node { Node next = null; Object data; } // 指定地点插入 public void addNode(Object data, int index) throws Ex...原创 2019-07-16 08:10:46 · 104 阅读 · 0 评论 -
排序
一、交换排序1、冒泡排序这是改进的冒泡排序。主要有两点改进(1)、外循环次数每次减一。根据冒泡排序的性质,每一次排序都是把队列最大数的往后移,所以每完成一趟排序,后面的数据已经有序了,故,每一趟把外层循环的次数-1。当然这也影响内层循环的次数。(2)、内层循环无移动,直接退出。内层循环如果没有移动,说明数据已经是有序了,故而设置一个标志位默认为false,如果内层不移动,改...原创 2019-07-11 22:33:20 · 139 阅读 · 0 评论 -
普通二叉树实现
package shu;public class myNode { Node root; public myNode(Node root) { super(); this.root = root; } public boolean isEmpty() { return root == null; } public void pre() { if (this.r...原创 2019-07-17 03:46:33 · 280 阅读 · 0 评论 -
算法:不使用额外变量交换数据
问题:如果x=10,y=23变为x=23,y=10不允许通过第三方变量方法:x= x^yy=x^yy=x^y证明:易知不论异运算、或运算都不涉及进位、退位。故可以考虑x,y一位时候的情况,他对任何位都是一样的。1、x=1,y=1x=x^y=0y=x^y=1x=x^y=12、x=1,y=0x=x^y=1y=x^y=1x=x^y=03、x=0,y=0x=x^y=0...原创 2019-07-20 08:37:44 · 259 阅读 · 0 评论 -
java查找
1、直接查找 /* * 直接查找,数组可以无序 */ private static int dirSeach(int[] arr, int index) { //r记录找到的索引,-1索引表示没找到,找到返回对应索引 int r = -1; //遍历整个数据 for (int i = 0; i < arr.length; i++) { //如果找到,把...原创 2019-07-17 22:07:18 · 287 阅读 · 0 评论