算法-链表-找到单链表入环节点

2022-4-7 diaba 笔试题

问题 判断一个单链表是否存在环,如果存在返回入环节点 要求 时间复杂度O(N),空间复杂度O(1) 方案 快慢指针:从头结点开始,快指针一次走两步,满指针一次走一步,如果这两个指针相遇后,快指针回到头结点,两个指针一起开始走,每次走一步,再次相遇的节点即是入环节点 代码 package com.jiucaiyuan.net.algrithm.linked; import java.util.HashSet; import java.util.Set; /** * 【问题】...

阅读全文>>

评论(0) 浏览(1272)

算法-链表-复制带随机指针的链表

2022-4-5 diaba 算法

package com.jiucaiyuan.net.algrithm.linked; import java.util.HashMap; /** * 【问题】复制带有随机指针节点的链表 * 【要求】时间复杂度O(N),空间复杂度O(1) * 【思路】如果不是空间复杂度O(1)的限制,可以使用Map,暂存新老节点之间的关系, * 然后再补齐rand字段,但是有O(1)限制,所以在克隆出新节点时,放到该节点之后, * 变成注入这个结构:1——>1`——>2——>2`——>3——>3`——>4——>4`——>5——&g...

阅读全文>>

评论(0) 浏览(1191)

算法-链表-是否为回文

2022-4-5 diaba 算法

package com.jiucaiyuan.net.algrithm.linked; import java.util.Stack; /** * 【问题】给定一个单项链表的头结点head,请判断该链表是否是回文结构 * 【例子】 * 1——>2——>1,返回true * 1——>2——>2——>1,返回true * 15——>6——>15,返回true * 1——>2——>3,返回false * 【要求】时间复杂度O(N),空间复杂度O(1) * 【思路】快慢指针,快指针走到末尾,慢指针走到终点...

阅读全文>>

评论(0) 浏览(1069)

算法-基数排序

2022-4-2 diaba 算法

package com.jiucaiyuan.net.algrithm.sort; import java.net.InetSocketAddress; /** * <pre> * 基数排序 * 根据数据特点进行排序,而非基于比较 * 时间复杂度O(N*logN) 空间复杂度O(1) * </pre> * Created by jiucaiyuan on 2022/4/1. */ public class RadixSort { public static void radixSort(int[] arr) {...

阅读全文>>

评论(0) 浏览(1108)

算法-堆排序扩展排序几乎有序数组

2022-4-1 diaba 算法

package com.jiucaiyuan.net.algrithm.sort; import java.util.PriorityQueue; /** * <pre> * 堆排序扩展 * 一个几乎有序的数组, * 几乎有序是指,如果把数组排好顺序的话, * 每个元素移动的距离可以不超过k,这个k相对于数组来说比较小, * 请选择合适的排序算法针对这个数组进行排序 * * 时间复杂度O(N*logk) 空间复杂度O(k) * * </pre> * Created by jiucaiyuan ...

阅读全文>>

评论(0) 浏览(1254)

算法-堆排序

2022-3-31 diaba 算法

package com.jiucaiyuan.net.algrithm.sort; /** * <pre> * 堆排序 * 数组表示二叉树[0,1,2,3,4,5,6] 下标i的左子节点是2*i+1 ,右子节点是 2*i+2 , 父节点是 (i-1)/2 * 大根堆:以i为头的整棵树,最大值是i * 小根对:以i为头的整棵树,最小值是i * 优先级队列结构就是堆结构 * 时间复杂度O(N*logN) 空间复杂度O(1) * </pre> * Created by jiucaiyuan on 2...

阅读全文>>

评论(0) 浏览(1228)

算法-插入法排序

2022-3-31 diaba 算法

package com.jiucaiyuan.net.algrithm.sort; /** * <pre> * 插入法排序 * i从0~N-1 * 处理0~i位置上有序,检查i-1和i是否有序,如果没有,交换,再检查i-2和i-1是否有序 * (效果就是当前i个元素往前找,找到合适自己的位置) * 排序结果是升序数组 * 时间复杂度O(N^2) 空间复杂度O(1) * * 数据状况不同,时间复杂度不同 * 最差的情况 7 6 5 4 3 2 1 时:时间复杂度O(N^2) 空间复杂度O(1) * 最好的情况 1 2 3 ...

阅读全文>>

评论(0) 浏览(1232)

算法-冒泡法排序

2022-3-31 diaba 算法

package com.jiucaiyuan.net.algrithm.sort; /** * 冒泡法排序 * 循环待排序数组,如果前面数比后面数大,交换, 循环完一次最后一位是最大数,下次处理0~N-2个数 * 排序结果是升序数组 * 时间复杂度O(N^2) 空间复杂度O(1) * * @Author jiucaiyuan 2022/3/25 21:48 * @mail services@jiucaiyuan.net */ public class BubbleSort { public static void bubble...

阅读全文>>

评论(0) 浏览(1255)

算法-选择法排序

2022-3-31 diaba 算法

package com.jiucaiyuan.net.algrithm.sort; /** * 选择法排序 * 循环待排序数组,i~N-1位置,每次循环找到最小值放到i位置上,然后i++,再次找最小值 * 排序结果是升序数组 * 时间复杂度O(N^2) 空间复杂度O(1) * * @Author jiucaiyuan 2022/3/25 21:48 * @mail services@jiucaiyuan.net */ public class SelectSort { public static void selectionS...

阅读全文>>

评论(0) 浏览(1140)

算法-逆序对(归并思路)

2022-3-30 diaba 算法

package com.jiucaiyuan.net.question; /** * <pre> * 一个数组arr中,如果左边的数,比右边的数大,则这两个数组成一个逆序对(不一定相邻),找出数组中所有逆序对 * 采用归并排序的思路进行改进实现 * 时间复杂度O(N*logN) * </pre> * * @Author jiucaiyuan 2022/3/30 23:01 * @mail services@jiucaiyuan.net */ public class FindReversePair { ...

阅读全文>>

评论(0) 浏览(1146)

算法-小和问题(归并思路,O(N*logN))

2022-3-29 diaba 算法

package com.jiucaiyuan.net.question; /** * <pre> * 一个数组arr的小和=所有位置上的值,左侧比概述小的和,就是该数组的小和 * 本示例是解法2 * * 解法1.暴力解题,循环处理所有数组的数,找到左侧比所处理的数小的加入结果和中 * 时间复杂度O(N^2) * * 解法2.转化为循环数组所有数,找出右侧比他大,即产生当前数加入到小和中 * 求右边比arr[i]大,可以转化为归并思路处理 * 划分左右两个进行排序,然后merge,在merge过程中,如果右侧...

阅读全文>>

评论(0) 浏览(1236)

算法-43.字符串相乘

2022-3-22 diaba 算法

package com.jiucaiyuan.net.question; /** * @Author jiucaiyuan 2022/3/22 21:59 * @mail services@jiucaiyuan.net */ public class TwoStrMultiply { /** * v2 leeCode上学的,确实方法好 * https://leetcode-cn.com/problems/multiply-strings/solution/zi-fu-chuan-xiang-cheng-by-leetcode-solu...

阅读全文>>

评论(0) 浏览(1190)

算法-并查集

2022-3-16 diaba 数据结构

package com.jiucaiyuan.net.algrithm.set; import java.util.HashMap; import java.util.List; import java.util.Stack; /** * @Author jiucaiyuan 2022/3/16 23:15 * @mail services@jiucaiyuan.net */ public class UnionFindDemo { public static class Element<V> { public V v...

阅读全文>>

评论(0) 浏览(1183)

算法-kmp

2022-3-16 diaba 算法

package com.jiucaiyuan.net.algrithm.sum; /** * Knuth-Morris-Pratt * * */ class Kmp { /** * kmp算法 * @param haystack * @param needle * @return */ public static int strStr(String haystack, String needle) { int n = haystack.length(), m = ...

阅读全文>>

评论(0) 浏览(1101)

JUC-Semaphore

2022-3-13 diaba 多线程

package com.jiucaiyuan.net.juc.lock; import java.util.Random; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; /** * 信号灯(许可数量) * 6辆车,3个车位 * @Author jiucaiyuan 2022/3/13 22:57 * @mail services@jiucaiyuan.net */ public class SemaphoreDemo { publ...

阅读全文>>

评论(0) 浏览(1184)

JUC-CyclicBarrier

2022-3-13 diaba 多线程

package com.jiucaiyuan.net.juc.lock; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; /** * 循环栅栏 * 集齐7龙珠召唤神龙 * * @Author jiucaiyuan 2022/3/13 22:48 * @mail services@jiucaiyuan.net */ public class CyclicBarrierDemo { public sta...

阅读全文>>

评论(0) 浏览(1193)

JUC-CountDownLatch

2022-3-13 diaba 多线程

package com.jiucaiyuan.net.juc.lock; import java.util.concurrent.CountDownLatch; /** * 演示CountDownLatch * 6个同学陆续离开教室之后,班长才能锁门 * * @Author jiucaiyuan 2022/3/13 22:40 * @mail services@jiucaiyuan.net */ public class CountDownLatchDemo { public static void main(String[] args) ...

阅读全文>>

评论(0) 浏览(1207)

java-nio-client聊天室客户端

2022-3-13 diaba IO

package com.jiucaiyuan.net.nio; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; import java.util.Scanner; /** * @Author jiucaiyuan 2022/3/13 11:04 * @mail services@jiucaiyuan.net */ public class Cl...

阅读全文>>

评论(0) 浏览(1284)

java-nio-server聊天室服务端

2022-3-13 diaba IO

package com.jiucaiyuan.net.nio; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import ...

阅读全文>>

评论(0) 浏览(1329)

开启三个线程打印ABC-synchronized锁和wait,notifyAll

2022-3-8 diaba 多线程

package com.jiucaiyuan.net.thread; /** * * 题目: * 编写程序,开启三个线程,这三个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印十次, * 要求输出结果必须按照ABC的顺序显示,如:ABCABCACB… * * 非指定线程唤醒。采用synchronized锁和wait,notifyAll配合使用。 * 这个方法有一个缺点,那就是notifyAll是唤醒其它两个线程, * 其它两个竞争获取锁会引起上下文切换,从而引起不必要的开销,因此,建议使用方法一。 * * */ class Pri...

阅读全文>>

评论(0) 浏览(1224)

Powered by emlog 京ICP备15045175号-1 Copyright © 2022