剑指offer
文章平均质量分 57
skyxmstar
这个作者很懒,什么都没留下…
展开
-
剑指offer编程题(1):数组
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。方法一: 利用二维数组由上到下,由左到右递增的规律, 那么选取右上角或者左下角的元素a[row][col]与target进行比较, 当target小于元素a[row]原创 2017-04-10 15:27:43 · 426 阅读 · 0 评论 -
剑指offer:(30)时间效率 :最小的K个数
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。package cn.com.jianzhioffer;import java.util.ArrayList;public class Solution30 {// public ArrayList GetLeastNumbers_Solution(int[]原创 2017-06-29 23:23:57 · 321 阅读 · 0 评论 -
剑指offer:(32)时间效率 :整数中1出现的次数(从1到n整数中1出现的次数)
求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。//主要思路:设定整数点(如1、10、100等等)作为位置点i(对应n的各位、十位、百位等等),分别对每个数位上有原创 2017-07-10 17:34:22 · 299 阅读 · 0 评论 -
剑指offer:(31)时间效率 :连续子数组最大和
package jianzhioffer;public class Solution31 { //动态规划:就是将中间值保存下来 public static int FindGreatestSumOfSubArray(int[] array) { if (array == null || array.length <= 0) return 0; int maxSum = ar原创 2017-07-08 19:19:48 · 229 阅读 · 0 评论 -
剑指offer:(33)时间效率 :把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。import java.util.ArrayList;import java.util.ArrayList;import java.util.Collections;import java.util.Compara原创 2017-07-11 11:07:24 · 219 阅读 · 0 评论 -
剑指offer:(34)时间效率和空间效率的平衡 :丑数
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数import java.util.ArrayList;public class Solution { public int GetUglyNumber_Solution(int index) {原创 2017-07-11 11:17:51 · 416 阅读 · 1 评论 -
HashMap的遍历方式
//hashMap的遍历方式1 Iterator> iter = map.entrySet().iterator(); char ch; while(iter.hasNext()){ Map.Entry entry = (Map.Entry) iter.next(); if(entry.getValue()==1) { ch = entr原创 2017-07-11 16:24:10 · 296 阅读 · 0 评论 -
剑指offer:(35)时间效率和空间效率的平衡 :第一个只出现一次的字符
在一个字符串(1package co.com.jianzhioffer;import java.util.HashMap;import java.util.Map;public class Solution35 { //方法一,创建一个hashMap来记录字符值及其对应的次数, //然后遍历字符串,如果出现某个字符的次数为1,则输出其索引位置 public static i原创 2017-07-11 16:46:55 · 249 阅读 · 0 评论 -
剑指offer:(22)举例让抽象问题具体化 :栈的压入,弹出序列
package jianzhioffer;import java.util.Stack;public class Solution22 { public static boolean IsPopOrder(int [] pushA,int [] popA) { if(pushA.length==0 || popA.length == 0) return fal原创 2017-06-11 10:55:31 · 299 阅读 · 0 评论 -
剑指offer:(36)时间效率和空间效率的平衡 :数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007package cn.com.jianzhioffer;public class Solution36 {// public static int InversePairs(int[] a原创 2017-07-12 21:22:07 · 274 阅读 · 0 评论 -
剑指offer:(37)时间效率和空间效率的平衡 :两个链表的第一个公共结点
输入两个链表,找出它们的第一个公共结点。思路一:因为如果两个链表有公共节点的话,则他们的尾部是一样的,用两个栈来存两个链表的节点,开始弹出的值是相同的,弹到不同的时候,就截至,其下一节点就是所求第一个公共节点。package cn.com.jianzhioffer;import java.util.Stack;public class Solution37 { public st原创 2017-07-12 21:35:01 · 312 阅读 · 0 评论 -
剑指offer:(27)分解让复杂问题简单化 :二叉搜索树与双链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:1、非递归思想 2、递归思想package cn.com.jianzhioffer;import java.util.Stack;public class Solution27 { public class TreeNode { in原创 2017-06-24 10:04:34 · 309 阅读 · 0 评论 -
剑指offer:(28)分解让复杂问题简单化 :字符串的排列
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。package cn.com.jianzhioffer;import java.util.ArrayList;impor原创 2017-06-24 23:26:57 · 407 阅读 · 0 评论 -
剑指offer:(23)举例让抽象问题具体化 :从上往下打印二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路: 二叉树的层次遍历么,借助一个队列就可以了package co.com.jianzhioffer;import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;public class Solution23 { pu原创 2017-06-14 17:57:20 · 230 阅读 · 0 评论 -
剑指offer:(23)举例让抽象问题具体化 :二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。二叉树搜索树就是二叉排序树,所有节点的左子树都小于它,右子树都大于它解法:递归法 非递归法package co.com.jianzhioffer;public class Solution25 { /* * 非递归原创 2017-06-15 15:20:52 · 253 阅读 · 0 评论 -
剑指offer:(38)知识迁移 :数字在排序数组中出现的次数
统计一个数字在排序数组中出现的次数。思路:排序数组一定要想到二分法查找 package co.com.jianzhioffer;import java.io.ObjectInputStream.GetField;public class Solution38 { public static int GetNumberOfK(int[] array, int k) {原创 2017-07-13 11:53:13 · 404 阅读 · 0 评论 -
剑指offer:(20)画图让抽象问题更具体:顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.import java.util.ArrayList;public class Solution { ArrayList list =原创 2017-06-07 10:15:58 · 276 阅读 · 0 评论 -
剑指offer:(26)分解让复杂问题简单化 :复杂链表的复制
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路: 1、复制每个节点,如:复制节点A得到A1,将A1插入节点A后面 2、遍历链表,A1->random = A->random->next原创 2017-06-17 16:53:38 · 282 阅读 · 0 评论 -
剑指offer:(25)举例让抽象问题具体化 :二叉搜索树的后序遍历序列
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路: 递归版:1)用前序遍历的方式访问到某一节点,把该节点添加到路径上,并累加该节点的值。 2)若该节点为叶节点,且路径中节点值得和等于输入整数,则当前路径符合要求,把它加入总的路径中原创 2017-06-16 23:10:31 · 233 阅读 · 0 评论 -
剑指offer:(3)单链表:从尾到头打印链表
package co.com.jianzhioffer;import java.util.ArrayList;import java.util.List;import java.util.Stack;public class Solution3 { //递归 static ArrayList list=new ArrayList(); public static Arr原创 2017-04-11 18:01:52 · 309 阅读 · 0 评论 -
剑指offer:(6)查找和排序:旋转数组中的最小值
package co.com.jianzhioffer;public class Solution6 { public static int minNumberInRotateArray(int [] array) { int low = 0; int high = array.length-1; while(low<high){ int原创 2017-04-17 17:54:37 · 278 阅读 · 0 评论 -
剑指offer:(7)递归和循环:斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。npackage co.com.jianzhioffer;import java.util.Scanner;/* * 斐波那契数列 */public class Solution7 { /* * 递归实现,实现简单,但会造成时间和空间浪费 */ public stat原创 2017-04-17 18:10:11 · 443 阅读 · 0 评论 -
剑指offer:(19)面试官谈面试思路:二叉树的镜像
package co.com.jianzhioffer;public class Solution19 { public class TreeNode { int val; TreeNode left = null; TreeNode right = null; TreeNode(int val) { this.val = val; } } public原创 2017-04-26 17:58:57 · 361 阅读 · 0 评论 -
剑指offer:(9)递归和循环:变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法关于本题,前提是n个台阶会有一次n阶的跳法。分析如下: f(1) = 1 f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数。 f(3) = f(3-1) + f(3-2) + f(3-3) ... f(n)原创 2017-04-18 09:48:49 · 349 阅读 · 0 评论 -
剑指offer:(4)树:重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:在二叉树的前序遍历序列中,第一个数字总是树的根节点的值。但在中序遍历中,根节点的值再序列的中间,左子树的节点的值位于根节点的值的左边而右子树的节点的值位于原创 2017-04-14 16:53:03 · 301 阅读 · 0 评论 -
剑指offer:(5)栈和队列:用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:入队:将元素进栈A出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果不为空,栈B直接出栈。package co.com.jianzhioffer;import java.util.Stack;public clas原创 2017-04-14 18:07:22 · 282 阅读 · 0 评论 -
剑指offer:(10)位运算,计算二进制中1的个数
二进制中1的个数输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。分析:如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三原创 2017-04-23 09:41:07 · 348 阅读 · 0 评论 -
剑指offer:(11)代码的完整性: 数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。传统公式求解时间复杂度O(n)public class Solution { public static double Power(double base, int exponent) { boolean g_invalid = false;原创 2017-04-23 09:50:03 · 360 阅读 · 0 评论 -
剑指offer:(13)代码的完整性: ]调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。package co.com.jianzhioffer;/* * 插排思想 */public class Solution13 { public static void reOrderArray(int a原创 2017-04-25 11:58:29 · 273 阅读 · 0 评论 -
剑指offer:(12)代码的完整性: 打印从1到最大的n位数
题目:输入数字n,按顺序打印出从1到最大 的n位十进制数。比如输入3,则打印1,2,3一直到最大三位数即999.重点: 1、当输入n很大时,最大的n位数是不是用整型(int)或者长整型(long long)都会溢出,大数问题 用数组存储 2、什么时候达到最大的n位数(n个9),只要对999....9加1,才会第一个数组位置(下标为0)的基础上产生进位package cn原创 2017-04-23 10:16:26 · 576 阅读 · 0 评论 -
剑指offer:(15)代码的鲁棒性:链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点。package cn.com.jianzhioffer;import java.util.List;public class Solution14 { public static class ListNode { int val; ListNode next = null; public ListNode(int val) {原创 2017-04-25 21:08:15 · 398 阅读 · 0 评论 -
剑指offer:(16)代码的鲁棒性:反转链表
输入一个链表,反转链表后,输出链表的所有元素。思路:定义三个指针,分别指向当前遍历的节点、它的前一节点及后一节点,为了防止链表断开。测试用例: 功能测试: 1、输入的链表含有多个节点 2、输入的链表只有一个节点 特殊输入测试: 1、链表头节点为null指针。package cn.com.jianz原创 2017-04-25 22:37:42 · 379 阅读 · 0 评论 -
剑指offer:(17)代码的鲁棒性:合并两个排序的链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:递归解决package cn.com.jianzhioffer;public class Solution17 { public static class ListNode { int val; ListNode next = null; public ListNode(i原创 2017-04-25 22:57:10 · 328 阅读 · 0 评论 -
剑指offer:(18)代码的鲁棒性:树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)方法一: 思路:参考剑指offer 1、首先设置标志位result = false,因为一旦匹配成功result就设为true, 剩下的代码不会执行,如果匹配不成功,默认返回false 2、递归思想,如果根节点相同则递归调用DoesT原创 2017-04-26 15:19:08 · 287 阅读 · 0 评论 -
剑指offer:(40)知识迁移 :数组中只出现一次的数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路: 可以用位运算实现,如果将所有所有数字相异或,则最后的结果肯定是那两个只出现一次的数字异或 的结果,所以根据异或的结果1所在的最低位,把数字分成两半,每一半里都还有只出现一次的数据和成对出现的数据,这样继续对每一半相异或则可以分别求出两个只出现一次的数字。 首先我们考虑这个问题原创 2017-07-16 11:04:53 · 468 阅读 · 0 评论