数据结构
lihaomuye
这个作者很懒,什么都没留下…
展开
-
两个栈实现一个队列
import java.util.Stack;public class Solution { Stack stack1 = new Stack(); Stack stack2 = new Stack(); public void push(int node) { stack1.push(node); } public int pop() { if(stack1.empty原创 2015-08-30 10:49:15 · 264 阅读 · 0 评论 -
堆排序
package heapSort;public class HeapSort { public static void main(String[] args) { int[] array={5,3,6,2,1,9,4,8,7}; heapSort(array); printArray(array); } public static void heapSort(int[原创 2015-10-06 10:18:34 · 259 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。package array;public class Solution { public void reOrderArray(int[] array) { int lastOdd=0; //上一个奇数的原创 2015-09-20 10:36:20 · 247 阅读 · 0 评论 -
数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。package halfnum;public class Solution { public static int MoreThanHalfNum_Solution(int[] arra原创 2015-09-20 16:45:00 · 420 阅读 · 0 评论 -
数字在排序数组中出现的次数
package number;public class Solution { public int GetNumberOfK(int[] array, int k) { int index=binarySearch(array,k); if(index==-1){ return 0; } int count=1; for(int i=index+1;i<arra原创 2015-09-20 16:47:44 · 234 阅读 · 0 评论 -
求1+2+3+...+n
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。package add;public class Solution { public int Sum_Solution(int n) { boolean flag=(n!=0)&&((n+=Sum_Solution(n-1)原创 2015-10-11 20:23:50 · 258 阅读 · 0 评论 -
平衡二叉树
输入一棵二叉树,判断该二叉树是否是平衡二叉树。package balancedTree;class TreeNode{ TreeNode left; TreeNode right; int val;}public class Solution { public boolean IsBalanced_Solution(TreeNode root) { if(root==n原创 2015-10-11 19:53:20 · 244 阅读 · 0 评论 -
翻转子串
假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。测试样例:"Hello world","worldhe原创 2015-10-13 09:28:59 · 275 阅读 · 0 评论 -
二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.va原创 2015-09-24 10:56:52 · 233 阅读 · 0 评论 -
数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。package repeatNum;import java.util.HashSet;import java.util.Se原创 2015-10-12 09:12:40 · 256 阅读 · 0 评论 -
旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。package rotateArray;public class Solution { public int minNumberInRotateArray(int [] a原创 2015-09-24 09:28:31 · 296 阅读 · 0 评论 -
最小的K个数
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。package minK;import java.util.ArrayList;public class Solution { public ArrayList GetLeastNumbers_Solution(int[] input, int k) {原创 2015-10-07 16:45:57 · 247 阅读 · 0 评论 -
回文链表
package palindrome;import java.util.Stack;class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solution { public boolea原创 2015-10-19 09:57:58 · 258 阅读 · 0 评论 -
链表反转
class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solution { public ListNode ReverseList(ListNode head) { if (head == null || head.next ==原创 2015-08-29 20:03:01 · 245 阅读 · 0 评论 -
从上往下打印二叉树
import java.util.ArrayList;class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}public class Solu原创 2015-09-09 21:39:21 · 285 阅读 · 0 评论 -
包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。package stack;import java.util.Stack;public class Solution { private Stack stack = new Stack(); private Stack minStack = new Stack(); public void push原创 2015-09-04 10:23:03 · 762 阅读 · 0 评论 -
顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.package matrix;import java.util.ArrayList;public class Solut原创 2015-09-04 12:00:08 · 265 阅读 · 0 评论 -
构建乘积数组
给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。package multiply;public class Solution { public int[] multiply(int[] A) { int n = A.leng原创 2015-09-04 17:04:35 · 321 阅读 · 0 评论 -
二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。public class Solution { public int NumberOf1(int n) { int count=0; while(n!=0){ count++; n=n&(n-1); } return原创 2015-09-04 16:16:15 · 208 阅读 · 0 评论 -
字符流中第一个不重复的字符
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。如果当前字符流没有存在出现一次的字符,返回#字符。import java.util.ArrayList;import java.util.HashMap; public原创 2015-09-11 11:11:26 · 262 阅读 · 0 评论 -
圆圈中最后剩下的数
package circle;import java.util.*;public class TestUtils { public static int leftPerson(int n) throws Exception { ArrayList list = new ArrayList(); for (int i = 1; i <= n; i++) { list.add原创 2015-09-27 09:42:04 · 307 阅读 · 0 评论 -
排序算法时间复杂度
冒泡排序 平均O(n2) 最好O(n) 最坏O(n2) 稳定快速排序 平均O(nlogn) 最好O(nlogn) 最坏O(n2) 不稳定堆排序 平均O(nlogn) 最好O(nlogn) 最坏O(nlogn) 不稳定原创 2015-10-17 09:45:04 · 233 阅读 · 0 评论 -
链表中环的入口结点
一个链表中包含环,请找出该链表的环的入口结点。package linkedCircle;class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solution { public ListNode EntryNodeOfLoo原创 2015-10-01 09:40:18 · 251 阅读 · 0 评论 -
两个链表的第一个公共结点
输入两个链表,找出它们的第一个公共结点。package linkedList;class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solution { public ListNode FindFirstCommonN原创 2015-09-24 10:12:38 · 238 阅读 · 0 评论