![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
面试算法
面试算法整理
linkingfei
coder;
展开
-
实用算法原理及简介
1、布隆过滤器public class BloomFilter { /** * 1、首先需要初始化一个二进制的数组,长度设为 L, * 同时初始值全为 0 。 * * 2、当写入一个 A1=1000 的数据时,需要进行 H 次 hash 函数的运算(这里为 2 次); * 与 HashMap 有点类似,通过算出的 HashCode 与 L 取模后定位到 0、2 处,将该处的值设为 1。 * A2=2000 也是同理原创 2021-01-29 21:51:54 · 248 阅读 · 1 评论 -
链表排序复杂度O(nlogn)
static Node sortList(Node head) { if (head == null || head.next == null) { return head; } Node mid = findMiddle(head); Node right = mid.next; mid.next = null; Node pre = sortList(head); No原创 2020-11-01 18:44:34 · 538 阅读 · 0 评论 -
数据溢出相关计算
1、整数反转 /** * 整数反转 * 例:142 ==> 241 * * 14 2 * 1 24 * 0 241 * * 存在问题: * 反转后数据溢出 * int型的数值范围是 -2147483648~2147483647 * @param x * @return */ public i原创 2020-11-01 18:22:29 · 1349 阅读 · 0 评论 -
还原抽取扑克牌顺序
有十张扑克牌,从上面开始抽,抽出一张放桌子上,然后再抽出一张放扑克牌的最下面,这样循环往复的操作,直到手里的牌都没有了。这时,桌子上牌的顺序正好是1 2 3 4 5 6 7 8 9 10。要求写代码求出原顺序。解法:逆向恢复法 /** * @param arr 原顺序数组 */ public static void solution(int[] arr) { if (arr.length < 0) { return;原创 2020-11-01 17:52:18 · 1400 阅读 · 0 评论 -
LeetCode—最大矩形面积
关键:记录左侧比当前值小的数据每次加入数据时,将递增栈中的数据弹出栈中保存数据的索引public static int largestRectangleArea(int[] arr){ if (arr == null || arr.length == 0){ return 0; } Stack<Integer> stack = new Stack(); int max = 0; for原创 2020-11-01 17:40:51 · 961 阅读 · 0 评论 -
重合区间的最大个数
/** * 根据start排序,递增 * 依次根据后一个节点对的起始节点的值和前一个节点的结束节点的值比较, * 如果后一个比前一个小,那么就说明存在重合区间,需要累加 * */ public static class Node{ int st...原创 2018-10-01 17:04:02 · 1792 阅读 · 0 评论 -
等概率划分
//7转为10 public int rand7(){ int f=(int) (Math.random()*7+1);//1<=x<=7 return f; } public int rand7ToRand10(){ while(true){ int num=7*(rand7()-1)+rand7();//1-49 if(num<40){ ...原创 2018-10-01 16:32:56 · 389 阅读 · 0 评论 -
单调栈的最大宽度
单调栈的最大宽度:1 2 6 3 5 71 2 63 5 7max=10 public static void getMaxWidth(int[] arr){ Stack<Integer> stack=new Stack<Integer>(); int max=0; int len=1; fo...原创 2018-10-01 16:15:52 · 170 阅读 · 0 评论 -
运算符相关算法
/** * 不用比较符号返回较大的数: * sign(): * +、0:1 * -:0 * * 思路1: * 比较a-b的符号为正或父,当产生溢出时,不能判别 * * 思路2: * 先比较两个数的符号: ...原创 2018-09-02 16:56:01 · 226 阅读 · 0 评论 -
数组最大生成窗口
/** * 最大生成窗口: * n-w+1个res * * res[]每个状态的最大值 * 设窗口大小:3 * 2 1 4 -5 6 7 * 7 0 5 8 * 5 -1 1 3 * preMax=0 * cur...原创 2018-09-02 10:21:48 · 132 阅读 · 0 评论 -
数学计算相关算法
public static void getAllPrimeNumber(int k){ List<Integer> list=new ArrayList<Integer>(); int count=0; for(int i=k;i>1;i--){ boolean flag=true; ...原创 2018-09-01 23:36:41 · 835 阅读 · 0 评论 -
拿到最后一个球赢
/** * 拿球问题:拿到最后一个球赢 * 设:A、B每次最多拿1-5个,只要最后剩6个 * * A赢: * 1、A先拿 * num%6=m * A先拿m个、以后每次A与B总的拿6个 * * 2、B先拿 ...原创 2018-08-31 17:45:22 · 1694 阅读 · 0 评论 -
字符串反转
字符串反转: 利用StringBuffer实现: public static String strReverse(String str){ if(str==null||str.length()==0){ return str; } StringBuffer sb=new StringBuffer(); ...原创 2018-08-18 17:52:00 · 142 阅读 · 0 评论 -
2018春招Java编程题
链家2018春招Java工程师编程题题解题目描述 在小红家里面,有n组开关,触摸每个开关,可以使得一组灯泡点亮。 现在问你,使用这n组开关,最多能够使得多少个灯泡点亮呢? 输入第一行一个n,表示有n组开关。接下来n行,每行第一个整数为k, 表示这个开关控制k个灯泡,接下来k个整数,表示控制的灯泡序号。 满足:1<=n<=1000 、1<...转载 2018-08-17 18:21:28 · 479 阅读 · 0 评论 -
最小栈的实现
通过添加辅助栈:加与所给栈相同大小的栈实现:复杂度小但占空间添加的栈只指示当前栈最小值例:datastack minStack 4 2 2 2 8 7 7 7public class MinStack { private LinkedList<In...原创 2018-08-17 17:05:07 · 512 阅读 · 0 评论 -
全排列-回溯与递归实现
全排列:思想:回溯法,尝试当前执行、若不合适、则回退到上一步例: a b c 确定第一个元素: 确定第二个元素: 剩下最后一个: a (b c) a b a c b (a c) b a ...原创 2018-08-17 16:51:20 · 224 阅读 · 0 评论 -
ip的合法性
正则表达式:public static void ipRegex(String str){ Pattern p = Pattern.compile("^((25[0-5]|2[0-4]\\d|[1]{1}\\d{1}\\d{1}|[1-9]{1}\\d{1}|\\d{1})($|(?!\\.$)\\.)){4}$"); Matcher m = p.matcher(str); b...原创 2018-10-01 17:10:11 · 363 阅读 · 0 评论 -
分苹果:每次分一半多一个
/** * * 分苹果:每次分一半多一个 * * n m=n/2+1 (p+1)*2 * &原创 2018-10-01 16:52:54 · 637 阅读 · 0 评论