- 博客(21)
- 收藏
- 关注
原创 Java实现归并排序
归并排序用到的方法就是分治法(divided-conquer-combined)思想就是:将数组分成两个数组,如果两个数组的元素都是有序的,那么就可以很方便的将这两组数据归并。如果没有序继续将两组数组分组,以此类推,当组内只有一个数据时,认为这个小组内已经有序,然后合并相邻两个小组就可以。Java代码如下package sort; //归并排序 //2015-05-31 public class M
2015-06-02 20:41:03
523
原创 Java代码 实现直接选择排序
直接选择排序很容易和直接插入排序搞混,其实它们俩个有相同点但是也有很明显的不同。相同点:都是将数据分为有序组和无序组不同点:直接插入排序默认数组的第一个元素为有序组,然后选择无序组的第一个元素将其和有序组的数据进行比较,然后找到一个合适的位置;而直接选择排序没有默认的有序组,是从无序组中选择其中最小的数据,将其直接放在有序组的最后就可以Java代码如下:package sort; //直接选择排序
2015-05-30 21:46:28
786
原创 Java代码 希尔排序
每天都更,最近再研究算法,希望能够把算法搞明白希尔排序的思想其实就是分组的插入排序 先将整个待排序列分割成若干子序列,然后依次根据缩减增量进行排序 如下举例: n=12; 15 26 5 39 19 38 10 3 58 78 9 98 第一次 gap=12/2=6 15 26 5 39 19 38 10 3 58
2015-05-30 16:01:33
762
原创 Java代码 插入排序
说好的每天都更的,我来了哈哈,今天写的是Java代码实现插入排序插入排序的思想1、每次将待排序的数据,按照关键字的大小和之前的有序序列进行比较,找到合适的位置将其插入Java代码如下:package sort; //插入排序 2015-05-29 public class InsertSort { //第一种 完全按照插入排序的定义来写; /*public void Insert1(
2015-05-30 14:19:14
690
原创 Java代码 写一个冒泡排序
第一次使用这个编辑器好好用醉了。。。刚写了一篇,结果不小心给关了,还要重新写。。。 冒泡排序 放空了这么就,终于知道自己该干什么,找到实习之后这又是一个新的开始,不要羡慕别人,因为你在别人眼里也是独一无二的言归正传,我是用Java写的冒泡排序,虽然冒泡排序是排序算法里面比较简单的,但是自己写出来之后还是很有成就感的。 在写的过程中遇到的问题就是swap方法的调用问题,一定要类型相同才能调用 冒泡
2015-05-28 09:23:32
5380
原创 Java代码 给出一个二叉树和一个数,判断该二叉树是否存在一个从根节点到叶节点的和与给出的数相同
从菜鸟到大牛一定要戒骄戒躁,沉下心来慢慢打磨自己! 这个题目的算法思想分为三种情况: case1树为空时,返回false case2 树只有一个根节点 case3 正常情况下的树 Java代码如下: /** * Definition for a binary tree node. * public class TreeNode { * int val; *
2015-05-15 08:59:42
1084
转载 Java的进阶过程
最近觉得好像豁然开朗了,对代码充满了passion,我想当一名coder,但不是一名只会coding的程序员。转一篇Java的学习心得,指导自己在Java的道路上越走越远。 每个人的学习方法是不同的,一个人的方法不见得适合另一个人,我只能是谈自己的学习方法。因为我学习Java是完全自学的,从来没有问过别人,所以学习的过程基本上完全是自己摸索出来的。我也不知道这种方法是否是比较好的方法,只能给大家
2015-05-14 09:35:30
433
原创 Java代码 判断一棵二叉树是否为对称的
出去玩了那么多天,终于能够静下心来,好好的敲会代码了 题目要求判断已知的一个二叉树是否是对称的。 算法思想是:首先判断这棵树是否为空树,如果空树则直接返回true 如果不为空,则在进行分类:case1:节点的左右子树为空,则直接返回true case2:节点的左右子树有一个为空,则直接返回false case3:节点的左右子树均不为空,则判断节点的左右子节点的值是否相等并且判断左节点的子
2015-05-13 10:15:40
2673
原创 Java代码 将一个链表中的和已给数字相等的数字删除
题目是:给出一个链表,给一个已知值,当链表中的数字和已给值相同时,将链表中的数字删除 算法思想:新建一个链表,将新链表放在这里,首先要设两个指针,p指向原链表,q指向新链表,并且新链表的头指针要指向原链表的头指针, 如果p指向的值等于已给值,则将p指向的下一个赋给q指向的下一个,如果不相等,则q继续往下走 Java代码如下: /** * Definition for singly-li
2015-04-28 09:14:34
699
原创 Java代码 将数字反转
坚持坚持,更博客,锻炼自己的毅力,题目要求将已知的数字反转输出,比如给的是123将其输出为321,-123将其输出为-321 算法思想就是:一直取x与10除的余数,将其加上结果的10倍输出,原数一直除10取商。 Java代码如下: public class Solution { public int reverse(int x) { long result=0; w
2015-04-28 08:44:40
1567
原创 Java代码 实现两个二进制数的加法
坚持坚持! 题目要求求两个二进制数的加法 算法思路:1、要定义几个参数,carry代表进位,opa代表数组a的元素转换成数字,opb代表数组b的元素转换成数字。sum代表数组的和 2、判断两个字符串是否长度相同,如果不同的要从左补齐。 3、两个字符串对齐之后,进行一个for循环,循环从字符串最后一位到第一位,分别对应相加,如果加和等于2的话就该位变为0,进位标志位carry为1,如果加和为1
2015-04-26 22:14:29
12463
2
原创 Java代码 将字符串转换成整数
这个算法题目很经典,我用的是Java语言,讲一个给出的字符串转换成整数,我们可以分为四步来进行。 算法思想:1、第一步:给出一个字符串,首先我们应该先判断它是否为空,这个可以通过调用字符串的长度方法来判断,如果长度为零,则代表字符串为空,直接返回0,如果不为空则继续进行下面的操作。 2、第二步:判断出字符串不为空,则继续往下进行,检查字符串是否有空格,如果有空格则跳过空格继续往下执行 3、第
2015-04-26 17:16:56
5029
原创 Java代码解决两个数组归并问题
两个数组归并是归并排序的一步 归并的思想是:两个数组是已排好序的,这里面有个小技巧就是在写算法的时候,倒着写,从数组的后面元素开始写,这样就不会存在覆盖的问题了 代码如下: public class Solution { public void merge(int A[], int m, int B[], int n) { int i=m-1,j=n-1,k=m+n
2015-04-25 10:01:31
545
原创 Java代码实现删除一个有序数组里面的重复元素
放松了这么多天,终于把博客重新捡起来了,以后保持每天3更,加油加油! 这次实现的算法是删除一个有序数组里面的重复元素 思路:一个数组是有序的,所以算法实现起来相对比较简单,因为只需比较数组相邻的两个数字即可,存在两种情况 1:如果数组里面不存在元素或者只存在一个元素,那么就不需要进行比较,直接返回数组的长度即可; 2:数组长度大于一的话那么就需要比较数组的相邻的两个元素,如果相等 的话那么
2015-04-25 08:56:31
4522
原创 Java代码 求二叉树的最小深度
已知一个二叉树,求其最小的深度 算法思路: 这个题目求其最小深度不同于最大深度那样,这个要考虑该二叉树的左右子树是否存在,有四个方面 1、该二叉树为空,则返回0; 2、该二叉树不为空,且左右子树均存在,则和求最大深度一样,利用递归的方法求出最小深度 3、该二叉树只存在左子树,则返回值为1 4、该二叉树只存在右子树,则返回值为1 第二种情况时,分别求出左子树的最小值和右子树的最小值,再
2015-04-08 22:13:17
2237
原创 Java代码 求二叉树的深度
所谓的二叉树的深度就是从根节点到叶子节点的依次经过的节点所形成的一条路径,最长的路径就是树的深度。 算法思想:会出现两种情况 1、该二叉树是空树,则返回0; 2、该二叉树不为空,用递归的方法,分别求出左子树和右子树的深度,比较他们的最大值,求整体树的深度时加1即可。 Java代码如下: /** * Definition for binary tree * public class
2015-04-08 21:18:40
673
原创 Java代码 判断两个链表是否相交
题目:判断两个单向链表是否相交,假设两个链表均不存在环 算法思路:有两种方法,第一种方法就是在其中一个链表上顺序遍历每个节点,每遍历一个节点的时候,在另外一个链表上顺序遍历每个节点,如果便利过程中发现两个节点相同,说明此时链表相交,也就找到了他们的第一个公共节点,这个算法的时间复杂度是O(mn),比较耗时 第二种方法是比较简单一点的方法:首先依次遍历俩个链表的节点,求出两个链表的长度,算出两个
2015-04-07 19:55:53
2767
原创 Java代码归并两个已排好序的链表
题目是:归并两个已排好序的链表,假设链表是从小到大递增排序的 算法思路就是:我的解法就是重新建立一个新的链表,将归并好的存放进去,一共有三种情况,假设俩个链表为链表l1和链表l2 1、第一种情况就是l1和l2同时不为空 2、l1为空,l2不为空 3、l1不为空,l2为空 针对第一种情况,还存在两中考虑,如果1的值小于2的值则将1的值存入新建链表内,如果2的值小于1的值则将2的值存入到新建
2015-04-07 10:09:12
545
原创 用Java代码删除一个已排好序链表中重复的数字
题目是:一直一个已排好序的链表,删除其中重复的数字,我的想法是重新建一个链表,存没有重复数字并且是已排好序的数字。 算法思想是: 首先要考虑该链表是否为空或者只有一个节点 重新建立一个链表,将原来链表的头节点设为新链表的头节点,然后依次比较原来链表的节点和他的后继节点,如果后继节点和该节点相同,则不存入新链表,若不相同则存入新建链表。代码入下: /** * Definition f
2015-04-06 21:58:14
1262
原创 坚持坚持!用Java写出删除一个链表的倒数第N个节点,并返回头节点(N总是可达的)
这个题目有个前提条件就是N总是可达的,所以直接省去了一种情况(N不可达时的情况) 思路: 数据结构里面首先给定两个指针p和q分别都指向这个链表的头节点,然后若想求出这个链表的倒数第N个节点,方法就是先让p向后挪N个位置,q不动。 因为N总是可达的,所以会有俩种情况, 1、这个链表就只有N个节点 2、这个链表有大于N个节点 如果是第一种情况,则需要删除的倒数第N个节点就是头结点,所以he
2015-04-06 11:23:12
2091
原创 用Java代码写一个判断两个二叉树是否相同
判断两个二叉树是否相同,我觉得应该从三个方面来判断: 1、若两个二叉树都是空树,则返回true,可认为两个二叉树相同; 2、若两个二叉树一个为空,一个不为空树,则两个二叉树不相同,返回false; 3、若两个二叉树都不为空树,则判断两个节点所指的值是否相同,若相同,则用递归的方法判断两个节点的左右节点是否相同,若相同返回true,否则返回false; Java代码如下: }
2015-04-05 18:54:56
2520
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人