数据结构与算法
JeemyJohn
这个作者很懒,什么都没留下…
展开
-
面试题—有重复序列全排列问题
最近面试遇到个高频面试题:有重复序列全排列问题,现在Java代码展示给大家,原理稍后有空补充。public class Demo { public static void main(String[] args) { char a1[] = {'a', 'b', 'c'}; perm(a1, 0, 3); System.out.printl...原创 2020-03-05 12:34:59 · 549 阅读 · 0 评论 -
面试题—三个数之和小于某个值的组合个数
本题是阿里蚂蚁金服面试题:给定一个数组s,和一个数a,在数组s里面找到3个数使这3个数的和小于a,即s[i]+s[j]+s[k]<a,请你设计一个函数返回数组s里这样的组合有多少个? int f(double s[], double a) { int cnt = 0; Arrays.sort(s); int i = 0; ...原创 2020-03-05 11:57:15 · 1675 阅读 · 1 评论 -
算法面试题整理
1. 给出一个正整数,将该整数分解成质因数相乘的形式,例如n=56,它的质因数相乘的结果是:2*2*2*7。#include<iostream>using namespace std;int main() { int n; cin >> n; while (n > 1) { int i; for (i = 2; i < n; i++) {原创 2016-11-30 22:34:57 · 960 阅读 · 8 评论 -
复制带有random指针的单链表
如图1所示,有一条单链表,其节点除了有next指针外,还有一个random指针。random指针可指向单链表中的任意节点,包括它自身。random指针一旦指定,便不再更改。请设计算法,复制此单链表,并给出时间复杂度。图1 带有random指针的单链表解法1. 时间复杂度为O(n*n)先按next指针,将链表复制一份。使用p1指向原链表的头节点,p2指向p1指向的节点的random节点,p3指向p1的原创 2016-12-15 10:57:30 · 1127 阅读 · 10 评论 -
算法
本文版权归原作者、译者所有,我只是转贴;如果侵害到您的权益,请联系我,我将删除本文。基本上,这文章可以说是最佳A*算法文档。极力推荐!Amit's A star Page中译文 译序这篇文章很适合A*算法的初学者,可惜网上没找到翻译版的。本着好东西不敢独享的想法,也为了锻炼一下英文,本人译了这篇文章。由于本人英文水平非常有限,六级考了两次加一块不超过370分,因此本译文难免转载 2016-11-24 16:07:02 · 3141 阅读 · 3 评论 -
跳跃表的原理及实现
1. 跳跃表的原理 学过数据结构的都知道,在单链表中查询一个元素的时间复杂度为O(n),即使该单链表是有序的,我们也不能通过2分的方式缩减时间复杂度。 如上图,我们要查询元素为55的结点,必须从头结点,循环遍历到最后一个节点,不算-INF(负无穷)一共查询8次。那么用什么办法能够用更少的次数访问55呢?最直观的,当然是新开辟一条捷径去访问55。 如上图,我们要原创 2016-12-05 21:34:21 · 3516 阅读 · 10 评论 -
Sample K算法
最近去国内某牛叉互联网公司面试,出了一道算法题,看似简单,但是真正的答案十分巧妙。故此回忆并将原题以及解题思路记录下来,供大家学习:随机的选取容量为N的数组中的k个元素,要求是不能重复选取,并且不能删除数组中的元素,只能够进行交换。1. 解题思路 今天就写到这,谁有好的解题方法请提出了共同学习。我这里明天继续……2. 贴上源码(Java)原创 2017-05-01 19:50:46 · 1488 阅读 · 7 评论 -
普里姆(Prim)算法
普里姆(Prim)算法,和克鲁斯卡尔算法一样,是用来求加权连通图的最小生成树的算法。1、基本思想 对于图G4而言,V是所有顶点的集合;现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最小生成树中的边。 从所有uЄU,vЄ(V-U) (V-U表示出去U的所有顶点)的边中选取权值最小的边(u, v),将顶点v加入集合U中,将边(u, v)加入集合T中,如原创 2017-08-18 22:36:28 · 1438 阅读 · 0 评论