
算法
文章平均质量分 72
Aliley
这个作者很懒,什么都没留下…
展开
-
Java单链表反转
【尊重原创,转载请注明出处】http://blog.youkuaiyun.com/guyuealian/article/details/51119499(一)单链表的结点结构: data域:存储数据元素信息的域称为数据域; next域:存储直接后继位置的域称为指针域,它是存放结点的直接后继的地址(位置)的指针域(链域)。 data域+ next域:组成数据ai转载 2018-01-23 10:21:30 · 188 阅读 · 0 评论 -
排序算法
一、简单选择排序 设所排序序列的记录个数为n。i取1,2,...,n-1,从所有n-i+1个记录中找出排序码最小的记录,与第i个记录交换。执行n-1趟后就完成了记录序列的排序。 最好时间复杂度:O(n^2), 平均时间复杂度:O(n^2), 最坏时间复杂度:O(n^2) 辅助存储:O(1) 不稳定public class SelectionSo原创 2017-12-26 09:42:01 · 155 阅读 · 0 评论 -
轻松搞定面试中的红黑树问题
http://blog.youkuaiyun.com/silangquan/article/details/18655795 连续两次面试都问到了红黑树,关键两次都没有答好,这次就完整地来学习整理一下。没有学习过红黑树的同学请参考:> Chapter 13 Red-Black Trees Chapter 14 Augmenting Data Structures转载 2017-12-28 19:55:48 · 232 阅读 · 0 评论 -
Leetcode: Maximum Subarray
Problem:Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [-2,1,-3,4,-1,2,1,-5,4],the contiguous subarray [4,-1转载 2017-12-28 21:09:58 · 167 阅读 · 0 评论 -
判断两个链表是否交叉,并求出交叉点
转载自:http://blog.youkuaiyun.com/seanyxie/article/details/6247071在前面一篇文章中讲了如何判断一个链表中有环,如果有环的话,又如何判断出环出现在哪里http://blog.youkuaiyun.com/xie376450483/archive/2010/08/19/5825261.aspx 今天要讲的和那篇类似,就转载 2018-01-02 17:04:12 · 5098 阅读 · 0 评论 -
求字符串的所有子串(Java/C++)
题目:求一个字符串的所有子串。例如字符串abc的子串有:a,ab,b,bc,c(注意一下子串的特点)下面我将分别使用Java和C++实现算法来解决这个问题://C++实现[cpp] view plain copyvoid getAllSubstrings(string str){ if(str.size(转载 2018-01-15 21:25:07 · 4696 阅读 · 0 评论 -
将数组中负数放在正数前面
既然题目要求的是把负数放在数组的前半部分,正数放在数组的后半部分,因此所有的负数应该位于正数的前面。也就是说我们在扫描这个数组的时候,如果发现有正数出现在负数的前面,我们可以交换他们的顺序,交换之后就符合要求了。因此我们可以维护两个指针,第一个指针初始化为数组的第一个数字,它只向后移动;第二个指针初始化为数组的最后一个数字,它只向前移动。在两个指针相遇之 前,第一个指针总是位于第二个指针的前面转载 2018-01-25 19:29:11 · 6401 阅读 · 0 评论 -
java 求解字符串中第一次出现的字符的位置
题目:在字符串中找出第一个只出现一次的字符的位置,如输入“abaccdeff”,则输出“2”。1解法:以空间换时间,借助Hashmap实现import java.util.HashMap;import java.util.Map;import java.util.Set;public class Solution { public int FirstNotRepea转载 2018-01-25 10:59:54 · 5949 阅读 · 0 评论 -
用字符串模拟两个大数相加——java实现
问题: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。思路: 1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加; 2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加; 3.把两个正整数转载 2018-01-25 10:31:21 · 638 阅读 · 2 评论 -
求两个字符串的最大交集,输出这个字符串和其长度
Public static BigestCommonSubString{Public staticvoid main(String [] args){ String s1=”andbskgd”; String s2=”hfswbmfkmd”; StringtargetString=getSubString(str1,str2); System.out.p转载 2018-01-25 10:19:39 · 1501 阅读 · 0 评论 -
二叉树的层次遍历----java实现
import java.util.LinkedList; public class LevelOrder { public void levelIterator(BiTree root) { if(root == null) { return ; } Linke转载 2018-01-25 09:13:56 · 448 阅读 · 0 评论 -
两个有序数组的合并排序,Java代码实现,并去重复,考虑空间利用率问题
题目:有两个有序数组a,b,现需要将其合并成一个新的有序数组。简单的思路就是先放到一个新的数组中,再排序。但是这样的没体现任何算法,这里考的不是快速排序等排序算法。关键应该是如何利用 有序 已知这个条件。可以这样想,假设两个源数组的长度不一样,那么假设其中短的数组用完了,即全部放入到新数组中去了,那么长数组中剩下的那一段就可以直接拿来放入到新数组中去了。其中用到的思想是:归并排序思转载 2018-01-24 20:01:11 · 2327 阅读 · 1 评论 -
输出单链表中倒数第k个结点(Java版)
题目:输入带头结点的单链表L,输出该单链表中倒数第k个结点。单链表的倒数第0个结点为该单链表的尾指针。要求只能遍历一次单链表。解题思路:如果不要求只能遍历一次单链表,我们可以先遍历一次单链表,求出它的结点的总个数n(包括头结点),所以单链表的结点是从倒数第n-1个到倒数第0个,然后再遍历一次单链表,遍历时访问的第n-k-1个结点就是该单链表中倒数第k个结点。现在要求只能遍历一次单链转载 2018-01-24 15:45:06 · 741 阅读 · 0 评论 -
二叉树的三种遍历方式java实现
二叉树的定义 二叉树(binary tree)是结点的有限集合,这个集合或者空,或者由一个根及两个互不相交的称为这个根的左子树或右子树构成. 从定义可以看出,二叉树包括:1.空树 2.只有一个根节点 3.只有左子树 4.只有右子树 5.左右子树都存在 有且仅有这5中表现形式 123二叉树转载 2018-01-24 15:42:01 · 185 阅读 · 0 评论 -
二分查找各种情况大总结
二分查找多次刷题时遇到,虽然每次也能写对,但花了蛮多时间,没好好想过。而且网上的太多版本,并不是很简洁,而且边界条件变化情况太多,容易混淆,下面是自己对二分查找的一些思考和总结,尽量写得简单易懂。三种基本版本:1.1 二分查找原始版--查找某个数的下标(任意一个)在有序数组中查找某个数,找到返回数的下标,存在多个返回任意一个即可,没有返回-1。所有程序采用左右均转载 2018-01-24 14:35:31 · 451 阅读 · 0 评论 -
B树和B+树
一、m阶B树1、根节点至少有两个子女2、每个中间节点都包含k-1个元素和k个孩子,其中m/23、每一个叶子节点都包含k-1个元素,其中m/24、所有的叶子节点都位于同一层5、每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域划分优势:自平衡,它能够维持多路平衡。B树主要应用于文件系统以及部分数据库索引,比如著名的非关系型数据库MongoDB原创 2017-12-25 16:24:41 · 258 阅读 · 0 评论