
算法
懒惰的毛毛虫
这个作者很懒,什么都没留下…
展开
-
Java-快速排序
在要排的数(比如数组A)中选择一个中心值key(比如A[0]),通过一趟排序将数组A分成两部分,其中以key为中心,key右边都比key大,key左边的都key小,然后对这两部分分别重复这个过程,直到整个有序。 整个快排的过程就简化为了一趟排序的过程,然后递归调用就行了。 一趟排序的方法:1,定义i=0,j=A.lenght-1,i为第一个数的下标,j为最后一个数...原创 2018-10-18 16:10:22 · 121 阅读 · 0 评论 -
位图bitmap算法(java)
简单的说就是用数组存放若有数据就标志为1或true,若不存在标志为0或false。比如1,2,2,5,这里最大值为5,0至5中不存0,3,4,所以:Array[0]=0,Array[1]=1,Array[2]=2,Array[3]=0,Array[4]=0,Array[5]=1上面数中由于2有两个,所以用...转载 2019-01-08 15:22:14 · 3512 阅读 · 1 评论 -
按奇偶排序数组 和 删除排序数组中的重复项
一:按奇偶排序数组给定一个非负整数数组 A,返回一个由 A 的所有偶数元素组成的数组,后面跟 A 的所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例:输入:[3,1,2,4]输出:[2,4,3,1]输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。解法:public int[] sortArrayByParity(int[]...原创 2019-01-24 00:37:39 · 272 阅读 · 0 评论 -
让你可以装逼的算法技巧总结
版权声明:转载需要经过同意 https://blog.youkuaiyun.com/m0_37907797/article/details/84960402 </div> <div id="content_views" class=&amp转载 2018-12-25 15:41:40 · 646 阅读 · 0 评论 -
删除k个数字后,保留最小的数
介绍如:1593121212去掉3个数,剩下1121212最小。思路如下:删除k个,可以采用贪心算法,每次删除1个那么每次删哪一个呢?若N<2,那就不用纠结了,因为最多只有一个选择若N>=2,则该整数可以写成XabY,X,Y分别是前缀和后缀,长度可以为0. a,b是相邻的两个数字,且a在b的左边。我们面临的选择就是删除a还是删除b的问题。若删除a,删除后变为XbY; 若...原创 2018-12-22 13:40:40 · 597 阅读 · 0 评论 -
JAVA-实现两个超大整数相加
思路:第一步,把整数倒序存储,整数的个位存于数组0下标位置,最高位存于数组长度-1下标位置。之所以倒序存储,更加符合我们从左到右访问数组的习惯。我们以 426709752318 + 95481253129 为例,来看看大整数相加的详细步骤:第二步,创建结果数组,结果数组的最大长度是较大整数的位数+1,原因很明显。第三步,遍历两个数组,从左到右按照对应下标把元素两两相加,就像小学...原创 2018-12-21 20:10:12 · 9537 阅读 · 2 评论 -
java 回溯法实现求迷宫路线
首先我们定义一个 n * n 的二维数组,模拟迷宫,用2这个数字表示迷宫的墙壁 ,0表示迷宫的路线 ,那么我们主要的思路就是 在迷宫的入口 判断入口的上下左右 哪一个方向不是墙壁 我们则进入进去,同时我们用1 这个数字表示走过的路线 0表示不通的路线 这就是我们大致的思路 下面是代码实现,代码上面都有具体注释 很容易看懂代码:public class TestMaze { // 定义...原创 2018-11-07 14:33:57 · 1677 阅读 · 0 评论 -
java 八皇后问题
八皇后问题来自国际象棋当中的皇后的摆法问题,是一个经典的算法问题国际象棋: 国际象棋是一个8 乘 8 的正方形棋盘,其中皇后 可以直线行走,斜线行走 都是不分上下左右和格数的下图是一种可行的八皇后摆法:所以,可归纳问题的条件为,8皇后之间需满足: 1.不在同一行上 2.不在同一列上 ...原创 2018-11-07 10:38:22 · 12191 阅读 · 7 评论 -
java 一行代码判断一个数是否2的整数幂
我们观察2的整数幂 换成二进制都有一个规律 如下:2 -> 0000 0010 4 -> 0000 0100 8 -> 0000 10002-1= 1 -> 0001 4-1=3 -> 0011 8-1=7 -> 0111这时我们 用 n & (n -1) 会发现结果都为...原创 2018-11-07 09:28:31 · 2369 阅读 · 0 评论 -
java实现小顶堆 在指定数据中找出前n大的数
小顶堆: 我们利用的特性:每个节点都比左右孩子小 图示: 取数组前n个数,构成小顶堆 然后从数组里面获取数据,如果比堆顶小,直接抛弃,如果比堆顶大,就替换堆顶,并调整堆,使堆始终满足小顶堆的特性 93比18大,替换18 调整堆然后依次处理下一个数44对数组内的数调整完成后,前n个大的数 就在小顶堆...原创 2018-11-06 11:06:41 · 1740 阅读 · 0 评论 -
java——实现二分查找法
二分查找又称折半查找,它是一种效率较高的查找方法。折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。 折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,折半查找的先决条件是查找表中的数据元素...原创 2018-10-17 15:35:39 · 1246 阅读 · 0 评论 -
两个数组的交集
原理: 类似于布隆过滤器,取Integer最大的boolean数组,循环第一个数组插入boolean数组,并设值为true,然后循环第二个数组,判断boolean数组是否为true,为true则表示 两个数组重复了 实现:public int[] intersection(int[] nums1, int[] nums2) { int max = Integer...原创 2019-01-21 23:24:56 · 289 阅读 · 0 评论