洗牌算法
之前两次面试都被问到洗牌算法,虽然不是直接问的,但都是基于洗牌算法的。结果第一次被问到之后没有重视,导致在一个地方栽了两次坑。。。😭
洗牌算法,就是给你一个1到n的序列,让你随机打乱,保证每个数出现在任意一个位置的概率相同。换句话说,经过洗牌的数组的排列组合有n!种可能。
之前两次面试都被问到洗牌算法,虽然不是直接问的,但都是基于洗牌算法的。结果第一次被问到之后没有重视,导致在一个地方栽了两次坑。。。😭
洗牌算法,就是给你一个1到n的序列,让你随机打乱,保证每个数出现在任意一个位置的概率相同。换句话说,经过洗牌的数组的排列组合有n!种可能。
平均查找长度(Average Search Length,ASL):需和指定key进行比较的关键字的个数的期望值,称为查找算法在查找成功时的平均查找长度。
图,最多的遇到的面试题就是深度优先搜索和广度优先搜索,这也是最基础的。
图的一个最重要的点:设置一个 visit[] 数组,用来表示图中的每个节点是否已经被访问过。
1 | Given a string which contains only lowercase letters, remove duplicate letters so that every letter appears once and only once. You must make sure your result is the smallest in lexicographical order among all possible results. |
1 | public String removeDuplicateLetters(String s) { |
1,2,3,4,3,8,7,6,5
→ 1,2,3,4,5,3,6,7,8
3,2,1
→ 1,2,3
1 | public void swap(int[] nums, int i, int j) { |