
算法
学好Java就改名
编程是爱好.河北科技师范学院学生大三学生,目前在学java.欢迎大家交流评论。@
展开
-
【位运算】位运算和二进制相关转换
一个数的二进制,往右移动,右侧用0来填充, 移动一位等价于*2。计算:首先1开头代表是负数,对应的值为连同符号为一起取反得到。,一个数的二进制,往右移动,左侧用符号位来填充。计算:首先-1先转换为正数1,1的二进制为。在二进制中如何把一个数,转换为对应的负数?,一个数的二进制,往右移动,左侧用0来填充。异或运算^,理解为无进位相加即可,或运算| ,有1则为1,全0则为0。,然后取反得到的值在加1,得到。与运算,全1则为1,有0则为0。例:-1在二进制中的表示为。那-1的二进制表示就是。原创 2024-09-10 13:18:56 · 257 阅读 · 0 评论 -
【算法】基数排序
【代码】【算法】基数排序。原创 2024-08-01 12:40:17 · 230 阅读 · 0 评论 -
【算法】累加和减半最少操作数
每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。nums 的和减小了 33 - 14.75 = 18.25 ,减小的部分超过了初始数组和的一半,18.25 >= 33/2 = 16.5。最终数组为 [5, 4.75, 4, 1] ,和为 5 + 4.75 + 4 + 1 = 14.75。解释:初始 nums 的和为 5 + 19 + 8 + 1 = 33。可以证明,无法通过少于 3 个操作使数组和减少至少一半。输入:nums = [5,19,8,1]原创 2024-07-29 22:50:55 · 392 阅读 · 0 评论 -
【算法】线段重合问题
每一个线段都有start和end两个数据项,表示这条线段在X轴上从start位置开始到end位置结束。给定一批线段,求所有重合区域中最多重合了几个线段,首尾相接的线段不算重合。例如:线段[1,2]和线段[2.3]不重合。接下来N行每行2个数,表示线段起始和终止位置。输出一个数,表示同一个位置最多重合多少条线段。线段[1,3]和线段[2,3]重合。第一行一个数N,表示有N条线段。原创 2024-07-28 22:31:42 · 909 阅读 · 0 评论 -
【算法】JAVA-使用小根堆合并K个有序链表
堆是一颗完全二叉树,小根堆顾名思义,最小的节点是根节点,并且每颗子树也都满足该性质,在Java中堆是PriorityQueue,可以根据比较器自定义是小根堆还是大根堆。输入:lists = [[1,4,5],[1,3,4],[2,6]]请将所有链表合并到一个升序链表中,返回合并后的链表。给定一个链表数组,每个链表都已经按升序排列。输出:[1,1,2,3,4,4,5,6]将它们合并到一个有序链表中得到。原创 2024-07-27 21:41:31 · 280 阅读 · 0 评论 -
【算法】全排列
上一篇文章我们介绍了有关快速排序的算法,今天我们来介绍有关全排列的算法。例如,有一个字符串“ABC”我们的要求是把这三个字符全排列的所有结果输出。算法思路:我们可以首先将第一个字符与后边的每个字符换顺序,得到不同的字符串,然后运用递归的思想去,将第二个字符与后边的字符换位置,知道换到最后一个字符就可以结束递归了,当然我们每次换完位置的时候还需要将位置还原回溯,这样才能够保证我们顺序不会乱。下面我们看一下代码:/* * 求一个字符串的全排列 */public class Rank { publ原创 2020-05-09 17:15:25 · 228 阅读 · 0 评论 -
【算法】java快速排序
我们常见的有很多排序算法,比如冒泡排序,插入排序等等,今天我们介绍一下关于快速排序的内容。快速排序的时间复杂度为:O(Nlogn)是一种较其他算法更快的一种算法。它的实现方式为,首先找到一个数值,作为一个标准。例如,在数组arr中,选取arr[0]作为标准,然后需要有两个指针left,和right,left负责从左向右扫描,right负责从右往左扫描,如果发现比标准值小,就要放到标准值的左边,如...原创 2020-05-08 10:33:48 · 173 阅读 · 0 评论 -
【算法】归并排序
【代码】【算法】归并排序。原创 2024-07-25 09:14:24 · 143 阅读 · 0 评论 -
【算法】堆排序
【代码】【算法】堆排序。原创 2024-07-24 22:34:11 · 143 阅读 · 0 评论 -
【算法】二分搜索
在一个最优化问题中,如果我们每次都可以把结果的区间范围缩小一半,那么就可以考虑用二分算法来解决。二分模板一共有两个,分别适用于不同情况。算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。版本1//当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1; ,计算mid时不需要加1。 int bsearch_1(int l, int r) { wh原创 2021-01-18 15:13:17 · 210 阅读 · 0 评论