- 博客(6)
- 资源 (2)
- 收藏
- 关注
原创 java 最快获取最小前K个数
从一列n个数字中取最小的前k个数字。这是一个面试经常会问到问题,回答这个问题并不难,但是如何能分析出最优的算法,能够分析出多少种算法,这会是面试官真正感兴趣的问题。这里总结一下这个问题的所有解法与复杂度。1. 快速排序法 O(N*logN)最简单直接的方法就是快速排序+返回前k个数字。快速排序是复杂度为N*logN的算法,而查找前k个数字需要是时间复杂度为O(K)。总体的时间复杂度为O(N*logN
2017-08-29 20:03:02 3066
原创 java 快速幂取模算法
当我们计算AB%C的时候,最便捷的方法就是调用Math函数中的pow方法,但是有时A的B次方数字过大,即使是双精度的double也会溢出,这个时候为了得到AB%C的结果,我们会选择使用快速幂取模算法,简单快速的得到我们想要的结果。为了防止数字溢出并且降低复杂度,我们需要用到下面的公式: ab mod c = (a mod c)b mod c这个公式的意思就是:积的取余等于取余的积的取余。很容易
2017-08-25 21:31:46 5616 2
原创 java 欧拉定理及原根的计算
java很少要用到非常复杂的算法,因为这门语言被创建就不是为了表述数学概念或是计算算法的。但有很多知识已经更偏向于算法概念,而且我们必须掌握。因为如果你一点都不了解,当面试官问你有关数论的问题的时候你只能说“不会”,如果你掌握了一些基础概念,做简单数论题目不会太费力,但是如果你对同余、原根、欧拉函数、扩展阿基米德、贝祖等式这些概念一点了解都没有,那你连思考的权利都没有了,当别人飞快的打代码时,你连题
2017-08-24 18:48:04 3653 1
原创 java 动态规划策略原理及例题
动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。在面试笔试中动态规划也是经常作为考题出现,其中较为简单的DP题目我们应该有百分之百的把握顺利解决才可以。动态规划定义动态规划实际上是一类题目的总称,并不是指某个固定的算法。动态规划的意义就是通过采用递推(或者分而治之)的策略,通过解决大问题的子问题从而解决整体的做
2017-08-22 19:44:32 16892 4
原创 java 最长公共子序列(LSC)问题
题目: 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)举例: Str1 Str2 resultStr abciba abdcab abca abc bca bc accb caac cc思路:这道题连暴力求解的欲望都没有,如果不用动态规划来做,暴力求解的时间级要到指数级别。那么对于这道题的思路,我们先用dp求出子序列状态数
2017-08-07 14:46:54 1134
原创 2017百度之星资格赛 1003 度度熊与邪恶大魔王
#include #include #include #include using namespace std; typedef long long ll; const int INF=0x3f3f3f3f; ll a[120000],b[120000]; ll k[1200],p[1200]; ll dp[1200][22];int m
2017-08-05 18:46:13 1235
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人