数据结构和算法
精神病有所好转O_O
这世界上只有10种人,一种懂二进制,另一种不懂
展开
-
一些底层原理
1.Java锁的底层实现AQS,CAS,AQS是AbstractQueuedSynchronized的缩写,是在可重入锁的内部实现中用到的类,在reentrantLock源码中,包括Sync的类就是继承与AQS,并且包括fairSync和nonFairSync两个内部类对象,并且可重入锁的lock以及unlock等方法都是基于sync的内部方法实现的,sync内部保存state状态,是0...原创 2018-08-08 10:03:14 · 296 阅读 · 0 评论 -
剑指offer-合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:新建一个头结点root,和一个跟踪结点p,两个链表指针指向结点的值进行比较。若一条链表结束了,那么另一条链表剩下的部分直接加到新链表的后边。注意奥,最后返回的是root.next,而不是root。public class Solution { public ListNode Merge...原创 2018-04-05 20:19:39 · 125 阅读 · 0 评论 -
剑指offer-链表中环的入口结点
题目描述一个链表中包含环,请找出该链表的环的入口结点思路:利用hashset不可以存重复元素的特点,add方法返回类型为boolean。那么ListNode不是基本类型,可以比较吗?ListNode虽然不是基本类型,但是比较时比较的是对象地址,是可以比较的。public class EntryNodeOfLoop { public ListNode method(ListNode pHead)...原创 2018-04-05 19:54:37 · 92 阅读 · 0 评论 -
剑指offer-斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39这个题可以说是迭代(Iteration) VS 递归(Recursion),f(n) = f(n-1) + f(n-2),第一眼看就是递归啊,简直完美的递归环境,递归肯定很爽,这样想着关键代码两三行就搞定了,注意这题的n是从0开始的:12if(n<=1) return n;else retu...原创 2018-04-03 17:14:32 · 97 阅读 · 0 评论 -
剑指offer-滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,...原创 2018-04-03 15:18:59 · 106 阅读 · 0 评论 -
剑指offer-链表反转
题目描述输入一个链表,反转链表后,输出链表的所有元素。大概思路流程如下图:public class Solution { public ListNode ReverseList(ListNode head) { ListNode newHead=null; ListNode next=null; ListNode p=head; ...原创 2018-04-09 21:33:46 · 160 阅读 · 0 评论 -
剑指offer-调整数组顺序使奇数位于偶数前边
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。此题很简单,两个容器,第一个装不能被2整除的,第二个装能被2整除的。原始解法:import java.util.*;public class Solution { public void reOrderArra...原创 2018-04-08 21:50:37 · 125 阅读 · 0 评论 -
海量数据处理十个方法大总结
第一部分、十道海量数据处理面试题1、海量日志数据,提取出某日访问百度次数最多的那个IP。 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相...转载 2017-11-22 21:06:15 · 5507 阅读 · 0 评论 -
HashMap的工作原理--重点----数据结构示意图的理解
HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入...转载 2018-02-12 20:05:41 · 216 阅读 · 0 评论 -
Map的5种遍历方法
//循环遍历map的方法 public class MapF { public static void main(String[] args) { Map<String, Integer> tempMap = new HashMap<String, Integer>(); tempMap.put("a","12"); tempMap.put("b",...转载 2018-03-29 08:17:28 · 158 阅读 · 0 评论 -
谈谈个人对MD5的理解
MD5确实是一种很好的算法,但其实我们每个人都应该知道有一种算法比它更好,那就是随机映射。我们来考虑everything(∞)→^[0-9a-fA-F]{32}$(2^32)所有函数中的随机函数,以此来理解MD5(因为这是MD5想努力达到的效果)。 压缩性:任意大小的东西都能映射成32个字符长的字符串,压缩性毋庸置疑。 抗修改性:只要初始数据不同(哪怕只是改变1bit),那么它们随机映射的结果可以...原创 2018-03-30 20:31:51 · 1327 阅读 · 1 评论 -
一道算法题解法,笑出声
今天在牛客上刷了一道题,题目是这样的:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。对于这道题,编程之美的思路是这样(常规思路):1. 如果第i位(自右至左,从1开...原创 2018-03-30 21:44:03 · 166 阅读 · 0 评论 -
一道算法题,本地环境OK,牛课网不通过,至今未解决
题目是这样的:找出字符串中第一个只出现一次的字符输入描述:输入一个非空字符串输出描述:输出第一个只出现一次的字符,如果不存在输出-1我的做法如下:package test;import java.util.LinkedHashMap;import java.util.Map;import java.util.Map.Entry;import java.util.Scanner;publi...原创 2018-03-30 21:55:32 · 284 阅读 · 0 评论 -
Arrays.sort()
通常情况下,我们通常直接使用此方法对数组等进行排序,其实还有一种自定义比较器制定比较规则的方法:sort(T[] a, Comparator<? super T> c) 继承此方法的时候,要自定义比较器,conpareTo方法返回值为1(升序),0,-1(降序)。举个栗子: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最...原创 2018-09-07 21:46:08 · 1648 阅读 · 1 评论