算法(JAVA)
文章平均质量分 72
zhang___yong
安卓菜鸟,大学生一枚
展开
-
找数组等分点&&指数快速幂
1.给出一个数组,要求在O(n)的时间内找到三个点,由这三个点确定的四段数组里的元素和相等,也就是找四等分点。当我们想要找一个二等分点的时候只需要用一个模拟指针依次指向每一个元素,直到元素前后的和相等。这里找四等分点的原理相等,用三个模拟指针指向三个位置,通过比较和调整这三个指针的位置找到合适的划分。具体代码: public int[] four(int[] a){ int length=原创 2017-03-08 20:36:51 · 831 阅读 · 0 评论 -
求字符串第一个非重复字符+首尾相连数数字依次remove
1.给定一个字符串,求第一个不重复的字符,如: abbcad -> c我最开始想到的就是使用LinkedHashMap<Character,Integar>,一个保存了键值对放入顺序的HashMap。遍历字符串,当map中有该字符时其value加一,没有则放入(char,1)。而后遍历map的key集合,找出第一个值为1的即可。 public char a(String ...原创 2018-02-13 23:41:01 · 625 阅读 · 0 评论 -
java算法(三)迭代(非递归)实现二叉树的前序中序后序遍历
递归无疑是遍历二叉树最简洁的方式,其依赖的是函数栈,非递归实现的话只要通过栈的辅助就可以了。前序遍历:根节点首先入栈,然后栈中元素依次出栈,每次出栈时压入该元素的右孩子和左孩子(注意这个顺序,这样弹出时才是左孩子在前)public void frontPrint(BTree tree){ if (tree==null) { return; } Stack stac原创 2018-01-27 15:56:01 · 841 阅读 · 0 评论 -
java算法(二)先序遍历和逐层遍历数据转二叉树
一般来说我们得到的先序遍历和逐层遍历的序列都不能转回二叉树,但是如果我们把叶子节点的null孩子也储存起来就可以,也就是把null看成叶子结点。这里用一个Integar链表来表示数据。先序遍历思路:递归为每个非null节点分配孩子节点。核心思想还是先序遍历。代码://先序遍历队列还原二叉树 public BinaryTreeNode generateTree(LinkedLi原创 2017-12-29 17:17:51 · 287 阅读 · 0 评论 -
java算法(一)二叉树逐层遍历打印(分层换行)
思路是维护一个节点队列和两个节点引用last(上一行最后的元素).nlast(本行最后的元素),初始化时nlast=last=root。不断取出队列第一个元素x,然后将x的左右孩子入队并移动nlast到最后一个孩子。然后判断x是否是last,是则打印并换行并将last指向nlast(开始下一行),否则普通打印。 文字描述不太清晰,结合程序走一遍就理解了。package structur原创 2017-12-29 16:07:01 · 4370 阅读 · 1 评论 -
山东大学模式识别实验(java)K-means算法
K-means是无监督学习,也就是说事先并不知道有几类,所有数据都是无标记的,所以虽然本实验的红酒数据集认为应该分为3类,但是对于k-means来说是没有意义的。每次分类前我们首先要人为指定分成K类,然后任意选取K个点作为K个类的中心点,遍历全集,离哪个中心近就认为是哪一堆的。接下来我们要验证所选中心点是否是真正的中心点,计算每一堆各个特征的平均值后得出的就是这一个类的中心,如果与我们认为的中心不原创 2018-01-13 20:59:26 · 1858 阅读 · 0 评论 -
山东大学模式识别实验(java)KNN算法
KNN算法就是把待分类数据放在训练集里找出离他最近的K个元素(欧氏距离),然后看看其中哪个类最多,就将这个元素分为这个类。在本实验中,使用数字数据集。每个数字含有一个二维数组表示其中的像素点,可以认为拥有M*N个特征,只不过每个特征只有0和1两种值,表示该像素点是否绘制。将下载的训练集和测试集放在项目根目录下,因为测试集中每个元素也是已标记数据,所以每次分类后可以判断分类是否正确,从而得出一个原创 2018-01-13 20:40:57 · 777 阅读 · 2 评论 -
山东大学模式识别实验(java)贝叶斯算法
贝叶斯算法,简单地说就是比较测试数据是各个类别的概率,概率最大的就判断为这个数据的类别。具体来说就是一个条件概率的计算,测试数据是X,某个类别是C,那么也就是求P(C|X)最大的C,等于P(X|C)P(C)/P(X),因为P(X)不变,所以不必引入计算。也就是说,比较的是P(X|C)P(C)。进一步,P(C)=C类数量/训练集总数,其中训练集总数不变,所以也可以忽略。P(X|C)=P(X1 | C原创 2018-01-13 20:24:45 · 658 阅读 · 0 评论 -
CCF计算机软件能力认证模拟试题参考答案(JAVA)(201703 1+2)
1.分蛋糕:小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继续将剩下的蛋糕中编号最小的给他,直到小明的蛋糕分完或者这个朋友分到的蛋糕的总重量大于等于k。原创 2017-09-08 19:18:23 · 1581 阅读 · 0 评论 -
(java)找出数组中和为K的一组解(动态规划)
考虑N个数的数组A中是否存在和为K的解,可以分为考虑(N-1个数中是否有和为K的解)或者(N-1个数中是否有和为K-A[N-1]的解(解包含A[N-1]的情况))。也就是说,动态规划方程是:P[N][K]=P[N-1][K]||P[N-1][K-A[N-1]];直接上代码: //找出数组中和为K的一组解 public void Solve(int[] a,int k){ if ...原创 2018-03-01 20:00:42 · 3307 阅读 · 0 评论