算法
静了静心
这个作者很懒,什么都没留下…
展开
-
算法:扑克牌顺序问题
题目描述:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手机没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组。解题思路:原始牌堆可以看做一个队列,按照题目描述,首先出队一个元素,然后出队另一个元素,并将该元素入队。此时有两种解题思路,一种是正向,设原始队列的顺序是1-n,经过上述过程,会得到结果数组,将结果数组的数字为索引,索引为数字构建新数组即为原...原创 2019-12-05 20:18:23 · 2092 阅读 · 1 评论 -
一道阿里笔试题:ip转化为整数
题目描述:将ip转化为整数保存解题思路:ip用三个.来隔开,四个位置每个位置上的整数的范围是0-255,此时可以用int类型的8位来代表一个位置上的整数,涉及位运算。java中一个int类型占32位,第1-8位代表ip第一个位置上的整数,第9-16位代表ip第二个位置上的整数,以此类推。ip转化为整数:/** *将 ip转化为整数 */ public static...原创 2019-12-05 20:02:56 · 394 阅读 · 0 评论 -
阿里面试题:50枚硬币拿取问题
题目面试:桌面上有50枚硬币,一次可以拿2,4,6枚,另一位同学和你竞争,你拿一次,他拿一次,怎么保证最后一枚硬币是你拿到。解题思路:这种问题可以从后往前推,如果要保证最后一枚硬币你拿到,那么你倒数第二次拿硬币后应该剩下8枚,此时另外一名同学不管是拿2枚,4枚,6枚,那么你肯定能拿到最后一枚。50-8=42 剩下42枚,怎么拿取?可以观察2 4 6 这几个数字的特点,4+4=8 2+6=8 6+...原创 2019-12-05 20:00:40 · 1177 阅读 · 1 评论 -
算法题:循环码排列
题目描述:给你两个整数 n 和 start。你的任务是返回任意 (0,1,2,…,2^n-1) 的排列 p,并且满足:p[0] = start,p[i] 和 p[i+1] 的二进制表示形式只有一位不同,p[0] 和 p[2^n -1] 的二进制表示形式也只有一位不同。解题思路:1.排列问题可想到深度优先搜索和广度优先搜索,但此题限制条件较多,搜索方向不易确定,不适合用这两种方法。2.可以联想...原创 2019-12-05 19:59:41 · 1348 阅读 · 0 评论 -
生产者消费者模型简单实现(java)
主要使用了juc中的Lock和Condition接口,代码如下:public class Storage { private static final int SIZE=100; private LinkedList<Object> linkedList=new LinkedList<>(); private final Lock lock=new...原创 2019-12-05 19:59:07 · 118 阅读 · 0 评论 -
B树和B+树结构上的区别
一个m阶的B树特征如下:1.非叶子节点最多有m个儿子;2.根节点的儿子书[2,m];3.除根节点外的非叶子结点的儿子数[M/2,M],向上取整;4.非叶子节点的关键字个数=儿子数-1;5.所有叶子节点位于同一层;6.k个关键字把节点分为k+1段,分别指向k+1个儿子;7.一个关键字只可能出现在一个节点中;8.搜索时有可能在非叶子节点结束;一个m阶的B+树的特征如下:1.有k个儿...原创 2019-12-05 19:58:38 · 183 阅读 · 0 评论 -
牛顿法求平方根java实现
牛顿法是一种将非线性方程线性化,用线性方程的解逼近非线性方程的解的求解方法。选取一个接近零点的x0,计算f(x0)和切线斜率f’(x0),切线方程为y=f(x0)+f’(x0)(x-x0),将切线与x轴交点的横坐标记为x1,x1比x0更接近方程的解,利用x1开始下一轮迭代,可得迭代公式:具体到求n的平方根,那么f(x)=x^2-n,f’(x)=2x,迭代公式为:具体代码:/** ...原创 2019-12-05 19:58:07 · 430 阅读 · 0 评论 -
算法题:判断一个整数是不是2的整数次幂
普通思路:拿这个数一直除以2,判断余数是否一直为0,直到这个数变为1.代码:public static boolean method1(int n){ while(n!=1){ if(n%2!=0) return false; n=n/2; } return true...原创 2019-12-05 19:57:21 · 320 阅读 · 0 评论 -
堆排序
堆的性质:大顶堆:每个节点的值都大于或等于其左右孩子节点的值。小顶堆:每个节点的值都小于或等于其左右孩子节点的值。堆排序基本思想:(以升序为例,升序用大顶堆,降序用小顶堆)1.构建初始堆;2.将堆顶元素与末尾元素交换,将最大元素沉到数组末端;3.重新调整堆的结构,使其满足堆定义,继续交换堆顶元素与当前元素,反复此步骤,直到整个序列有序。代码://堆调整 private st...原创 2019-12-05 19:56:48 · 49 阅读 · 0 评论 -
常见的数据结构与算法
贪心算法动态规划二分法回溯法排序递归BFSDFS拓扑排序链表栈队列树图位运算并查集原创 2019-04-21 21:56:38 · 74 阅读 · 0 评论