- 博客(11)
- 资源 (1)
- 收藏
- 关注
原创 找最小的K个数
问题描述: 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。方法1:利用快速排序的思想,每次取得划分元素的位置partitionIndex。该位置代表key值是整个数组的第partitionIndex+1小。将partitionIndex+1与k比较,如果小于k,继续往右划分。如果大于k,继续往左划分,直到partition
2016-04-30 18:53:40 897
原创 单链表的翻转
思路:遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。 public ListNode ReverseList(ListNode head) { if(head == null){ return head; } ListNode p1
2016-04-29 10:47:49 328
原创 判断一颗二叉树是不是对称的
对称二叉树符合的条件: 根节点以及其左右子树 左子树的左子树和右子树的右子树相同 左子树的右子树和右子树的左子树 boolean isSymmetrical(TreeNode pRoot) { if(pRoot == null){ return true; } return isMirror(pRoot.left
2016-04-28 23:46:04 928
原创 用两个栈实现队列
解题思路: 入队时,将元素压入s1。 出队时,将s1的元素逐个“倒入”(弹出并压入)s2,将s2的顶元素弹出作为出队元素,之后再将s2剩下的元素逐个“倒回”s1。import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> st
2016-04-28 22:56:10 462
原创 根据前序遍历和中序遍历,构造二叉树
思路:前序的第一个字母为树的根节点,然后查看中序序列中这个字母的位置,它之前的为左子树,之后的为右子树,然后分别对这两个子树的前序和中序序列做递归操作。 public TreeNode reConstructBinaryTree(int [] pre,int [] in) { int n = pre.length; TreeNode root = new Tre
2016-04-28 22:23:50 734
原创 判断一个点是否在三角形内
问题描述:一个二维坐标系中(100*100,每一维0~99),已知三角形三个顶点的坐标A、B、C,判断坐标系中的任意点:P,是否在三角形内(在三角形边上也认为在三角形内)思路:如果三角形PAB,PAC和PBC的面积之和与三角形ABC的面积相等,即可判定点P在三角形ABC内 public static boolean isInTriangle(POINT A, POINT B, POINT C
2016-04-28 17:12:10 742
原创 求二叉树的深度和宽度
题目描述:求二叉树的宽度和深度 给定一个二叉树,获取该二叉树的宽度和深度。 //二叉树的高度: public static int getHeight(BiNode head){ if(head == null){ return 0; } int leftHeight = getHeight(head.left
2016-04-28 15:57:27 1045
原创 编程之美2.10之寻找数组中的最大值和最小值
问题描述:寻找一个数组中的最大值和最小值。 方法一:扫描一遍数组,找出最大和最小方法二:将相邻两个数分为一组,较大的数放在偶数位、较小的数放在奇数位。再分别从这两部分中找出最大值和最小值。方法三:将相邻两个数分为一组,用Max和Min变量存储当前的最大值和最小值。同一数组比较之后,不交换次序,而是将下一个两个数的较大值和Max比较,较小数和Min比较。以此往后执行。方法四:采用分治思想,分别求前后
2016-04-27 15:43:43 1082
原创 编程之美2.9节之Fibonacci数列
Fibonacci数列形式:F(0) = 0,F(1)=1,F(n)=F(n-1)+F(n-2) if n>1。 求解该数列的第n项有三种方法,其中前两种方法很好理解。主要解释下第三种方法的思路: Fibonacci是二阶递推数列,所以存在一个2*2的矩阵A,使得: (Fn,Fn−1)=(Fn−1,Fn−2)∗A=...=(F1,F0)∗An−1(F_n, F_{n-1}) = (F_{n-1
2016-04-26 16:13:21 559
原创 编程之美2.7节求最大公约数问题
用java写的关于求最大公约数的三种方法:package suda.alex.chapter2; import java.util.*;public class Gcd { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = n
2016-04-26 13:15:33 655
原创 编程之美扩展问题总结2.1(2)
问题描述:给定两个正整数A和B,问A和B的二进制表示中有多少位不同? 解题思路:对A和B异或操作,转换为求一个二进制数中位数为1的问题。int Count(int A,int B) { int num = 0; int v = A^B; while(v) { if(v % 2 == 1) { nu
2016-04-25 11:33:15 1029
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人