算法
怪盗基德007
这个作者很懒,什么都没留下…
展开
-
Java/Go实现链表反转
用两种方法实现。public class ReverseLinkTest { public static void main(String[] args) { // TODO Auto-generated method stub Link link = new Link(); Node head = link.createLink(...原创 2017-09-18 13:49:07 · 1310 阅读 · 0 评论 -
Java/Go实现——选择排序和冒泡排序
/** * 选择排序算法 * 在数组中找到最小元素,放在第0个位置; * 再找到次最小元素,放在第1个位置;再找到第三最小元素,放在第2个位置; * 以此类推,直到所有元素排序完成 * @param array */ public static void SelectSort(int[] array){ int temp, min, m; for(int i = ...原创 2017-09-18 22:26:50 · 402 阅读 · 0 评论 -
Java/Go实现——把正整数数组的元素拼成一个最小的数
转自几个面试经典算法题(http://www.cnblogs.com/sunniest/p/4596182.html)题目四这个算法的思想和快速排序的思想相似。先把第一个元素p当作中间数,数组前后各有一个索引begin、end。先从后索引对应元素e起,如果ep>pe或e=p,那么后索引往前移动,直到后索引等于前索引,或ep<pe。交换e、p元素。再从前索引对应元素b起,如果pb>...原创 2017-09-18 22:33:33 · 825 阅读 · 0 评论 -
算法:根据先序遍历和中序遍历,确定二叉树——Java实现
转自《Java程序员面试笔试宝典》(何昊等编著,机械工业出版社)根据先序遍历和中序遍历,确定二叉树后,可以给出后序遍历或层序遍历。 public int findIndexInArray(int[] array , int data , int begin , int end){ for(int i = begin ; i <= end ; i++){ if(data ==原创 2017-10-06 17:29:55 · 925 阅读 · 0 评论 -
算法:两个栈实现一个队列——Java实现
import java.util.Stack;public class Solution { Stack stack1 = new Stack(); Stack stack2 = new Stack(); public void push(int node) { stack1.push(node); } public原创 2018-05-09 14:25:05 · 182 阅读 · 0 评论 -
算法:二叉搜索树的后序遍历序列——Java实现
public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if(sequence == null || sequence.length == 0){ return false; } if(sequence.length =...原创 2018-05-11 18:07:34 · 226 阅读 · 0 评论 -
算法:两个有序单链表的合并(Java)
两个有序单链表,要求合并后依然有序。时间复杂度O(m+n),m和n分别是两个链表的长度。public class MergeTwoList { /** * 循环 * @param n1 * @param n2 * @return */ public static Node mergeTwoListByLoop(No...原创 2018-05-07 17:39:18 · 2531 阅读 · 0 评论 -
算法心得
这篇文章是自己在练习一些算法题时的思考和心得。文章内容会不定期更新。一、常规套路套路一:循环或递归很多复杂的算法题,最终都可以用循环或是递归来实现,并且一般用这两种方法都可以实现,只不过空间复杂度和时间复杂度会有差别。实例:字符串反转,二分查找。套路二:递推对于一些没有思路的算法题,可以先从0或是1开始,求出递推公式,然后寻找其中的规律。实例:斐波那契数列,青蛙原创 2018-05-08 14:40:37 · 339 阅读 · 0 评论 -
算法:求斐波那契数列第n项(兔子繁殖,青蛙跳台阶)——Java实现
f(n) = f(n-1) + f(n-2), f(0) = f(1) = 1 public int f(int n){ if(n < 0){ return -1; } if(n == 0 || n == 1){ return 1; } return f(n - 1) + f(n - 2); }转载 2017-09-19 21:44:47 · 1535 阅读 · 0 评论 -
算法:堆排序——Java实现
参考https://www.cnblogs.com/MOBIN/p/5374217.htmlpublic class HeapSort { private static void heapSort(int[] arr) { int len = arr.length -1; for(int i = len/2 - 1; i >=0; i --){ //堆...原创 2018-05-28 21:19:56 · 171 阅读 · 0 评论 -
算法:快速排序(Java/Go)
快速排序使用分治的思想和递归。先选择第一个元素作为中间数,把小于中间数的元素放在其左边,大于中间数的元素放在其右边。再对中间数的两边两个子数组分别用上述方法递归处理,直到所有元素排序完毕。时间复杂度在常见排序算法中最快,是nlogn。import java.util.Arrays;public class QuickSort { /** * 递归1 *...原创 2017-09-18 13:31:39 · 487 阅读 · 0 评论 -
算法:折半查找、二分查找(Java/Go)
要求数组已经排好序。Java语言/** * 二分查找/折半查找 */public class BinarySearch { /** * 递归 * @param array * @param start 查找范围内的最小索引 * @param end 查找范围内的最大索引 * @param target * @...原创 2017-09-01 11:19:52 · 417 阅读 · 0 评论 -
算法:选择排序、shell排序、合并排序——Java实现
private void insertSort(int[] array){ int temp, j; for(int i = 1; i < array.length; i++){ temp = array[i]; for(j = i; j >= 1 && array[j - 1] > temp; j--){原创 2017-11-13 17:02:42 · 326 阅读 · 0 评论 -
字符串反转
这里提供两种方法实现。(1)使用循环而非递归,时间复杂度O(n),空间复杂度T(n)。public String reverseLoop(String s){ if(s == null || s.length() <= 1){ return s; } StringBuffer sb = new StringBuffer原创 2017-09-01 10:08:19 · 753 阅读 · 0 评论 -
Java实现——数组中连续元素子数组的和最大
转自几个面试经典算法题Java解答(http://www.cnblogs.com/sunniest/p/4596182.html)题目五//求数组中一个或连续多个元素组成子数组中,和最大的子数组。时间复杂度O(n)public class SubArraySumMax { public int findSubMax(int[] array){ int curSum = 0; int原创 2017-09-19 21:31:07 · 1407 阅读 · 0 评论 -
Java实现——数组元素全排列
打印元素各不相同的字符数组的全排列public class AllSort { public void permutation(char[] c , int begin , int end){ if(begin == end){ for(int i = 0 ; i < c.length ; i++){ System.out.print(c[i]); } Syst原创 2017-09-19 21:58:48 · 1405 阅读 · 0 评论 -
Java实现——求整数数组中出现次数超过数组长度一半的元素
当数组长度是偶数,且某元素出现此数是数组长度一半时,不满足题目所求。public class FrequencyOverHalf { public int frequencyOverHalf(int[] array){ if(array == null || array.length == 0){ return -1;原创 2017-09-20 17:07:30 · 586 阅读 · 0 评论 -
Java实现——判断数组出栈顺序
转自几个面试经典算法题Java解答(http://www.cnblogs.com/sunniest/p/4596182.html)题目八两个整数数组,数组中没有重复元素。第一个数组按顺序入栈,判断第二个数组是否是该栈的弹出顺序。比如按照1、2、3、4、5入栈,出栈可以是2、1、5、4、3,但不会是4、5、2、1、3.注意第9行intValue()方法的重要性,这与数组元素范围是否在原创 2017-09-20 22:02:11 · 1318 阅读 · 1 评论 -
Java实现——顺时针打印N阶方阵
转自几个面试经典算法题(http://www.cnblogs.com/sunniest/p/4596182.html)题目一用递归的方法顺时针打印N阶方阵。先打印最外一圈,然后递归打印剩余内部的(N-2)阶方阵//print element of square matrix clockwisepublic class ClockwiseMatrix {public vo原创 2017-09-18 22:29:10 · 1266 阅读 · 0 评论 -
Java实现——查找数组中连续元素的和等于给定数的子数组
转自几个面试经典算法题Java解答(http://www.cnblogs.com/sunniest/p/4596182.html)题目二//给出一个排序好的数组和一个数,求数组中连续元素的和等于所给数的子数组public class SubArraySum { public void findSubArraySum(int[] array , int sum){ if(array原创 2017-09-19 21:25:43 · 3731 阅读 · 0 评论 -
Java实现——求丑数 方法二
题目来自几个面试经典算法题Java解答(http://www.cnblogs.com/sunniest/p/4596182.html)题目十丑数是质因数只有2、3或5的数,1是第一丑数。下面是原作者的算法,比我的算法快很多。 public int min(int a , int b , int c){ return (a <= b) ? (a <= c ? a : c)原创 2017-09-29 21:35:42 · 531 阅读 · 0 评论 -
Java实现——多张扑克牌是否能组成顺子
转自几个面试经典算法题Java解答(http://www.cnblogs.com/sunniest/p/4596182.html)题目九从一副扑克牌中抽取5张,判断能否组成顺子(即5个连续的数字),其中大小王可以充当任意数字。我对代码做了一些改动,可以抽出最多15张,组成顺子0-14或1-15,大小王当0、14或是14.public class CardContinuous {原创 2017-09-23 22:55:48 · 1499 阅读 · 0 评论 -
算法:排序二叉树的建立与遍历——Java实现
转自《Java程序员面试笔试宝典》(何昊等编著,机械工业出版社)在排序二叉树中,左子树的数值都小于双亲结点的数值,右子树的数值都大于等于双亲结点的数值。每个子树也递归满足上述条件。下面先给出了建立排序二叉树的算法,然后依次给出了先序、中序、后序和层序遍历二叉树的方法。import java.util.Queue;import java.util.LinkedList;public原创 2017-10-06 16:23:01 · 546 阅读 · 0 评论 -
Java实现——求丑数
题目来自几个面试经典算法题Java解答(http://www.cnblogs.com/sunniest/p/4596182.html)题目十丑数是质因数只有2、3或5的数,1是第一丑数。下文中我的算法与原作者给出的不同,我的算法时间复杂度比原作者的高出很多。下一篇会给出原作者的算法。public class UglyNumber { public boolean isUglyNu原创 2017-09-26 22:18:11 · 721 阅读 · 0 评论