
剑指offer
文章平均质量分 78
hlang8160
这个作者很懒,什么都没留下…
展开
-
剑指_调整数组顺序使奇数在前偶数在后
1.如何实现将整体向后移动一位?将从begin到from-1总体向后移动一位,将begin位置保存from位置的数字需要从后向前依次替换int tmp=array[from];for(int i=from-1;i>=begin;i++){ array[i+1]=array[i];}array[begin]=tmp;2.采用快排的思想,利用头部指针和尾部指针。调整顺序原创 2017-12-09 11:59:44 · 368 阅读 · 0 评论 -
剑指38_字符串的全排列
1.采用递归的方法全排列的本质是头部固定,不断较换尾部,直到所有元素都当过头部。1.让每个元素都当一次首部,通过将第一个元素与当前元素和之后所有元素做交换得到每个元素都当首部的情形。(每次交换之后进行第二次递归,并将交换初始状态,才能在第二个训话交换时,让每个元素都当一次头部)2.之后将后面其他同样的元素一样固定第二位,让后续所有元素也都出现在第二个位置上,同样通过交换操作。imp原创 2018-01-06 17:26:00 · 218 阅读 · 0 评论 -
剑指40_最小的k个数
import java.util.*;public class Solution { public ArrayList GetLeastNumbers_Solution(int [] input, int k) { //受上一题的启发,同样找到index为k-1的数字,左边都是小于的数字 ArrayList list=new ArrayList(); i原创 2017-12-31 18:06:28 · 211 阅读 · 0 评论 -
剑指_49丑数
有两个解决方法:第一个,逐个判断每个整数是不是丑数的,对于每个数,判断该数是不是丑数,如果是丑数,那么计数加1,如果不是丑数那么判读下一个数,直到找到第1500个丑数。丑数是指该数的最小因子只有2,3,5那么判断一个数是不是丑数的方法就是,如果该数能被2整除,那么将该数除以2,能被3整除,则除以3,能被5整除,则除以5,看最后的数是不是1,如果是1那么该数就是丑数。 publ原创 2018-01-07 17:07:39 · 214 阅读 · 0 评论 -
剑指41_数据流中的中位数
利用大顶堆,小顶堆来保存数据流中的数字。大顶堆的数字都比小顶堆的数字小,两个堆的容量相差不超过1.数据流中的中位数就在两个堆的堆顶中。第一。如何保证两个堆的容量相差不超过1,设计一个count,标号为偶数位置加入到小顶堆,标号为奇数的加入到大顶堆。第二。如何保证大顶堆的的所有数字都比小顶堆的所有数字小,即如何保证每次大顶堆的顶部元素比小顶堆的顶部元素小。可以先将待插入到大顶堆的元素原创 2018-01-07 17:23:30 · 275 阅读 · 0 评论 -
剑指_5替换空格
方法1,新建一个StringBuffer,将字符串读入添加到StringBuffer中,当字符串出现空格是就将其替换为‘%20’public class Solution { public String replaceSpace(StringBuffer str) { StringBuffer out=new StringBuffer(); for(in原创 2018-01-07 18:03:38 · 259 阅读 · 0 评论 -
剑指_43_二叉搜索树第k大节点
因为二叉搜索树的中序遍历是有序,因此只要中序遍历到k次就可以了/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/p原创 2018-01-07 21:41:06 · 214 阅读 · 0 评论 -
剑指offer_滑动窗口的最大值
/*用双向队列解决滑动窗口最大值问题。解决思路:第一。建一个滑动窗口大小的双向队列,保证双向队列中只存有k个值。第二。保证双向队列中的队头就是滑动窗口的的最大值。第三。什么时候将窗口的最大值加入?*/import java.util.*;public class Solution { public ArrayList maxInWindows(int [] num, int原创 2018-01-08 17:33:34 · 207 阅读 · 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].不能使用除法。解析:如果没有不能使用除法的限制,可以用公式B[i]=A[0]*A[1]*.....*A[n-1]/A[i]表示,使用除法时要特别注意A[i]等于0的情况。现转载 2018-01-08 18:37:33 · 241 阅读 · 0 评论 -
剑指_45把数组排成最小的数
package Jianzhi;import java.util.Arrays;import java.util.Comparator;/* * 先将整型数组换成String数组排序, * java使用自定义的排序方法需要实现java.util.Comparator接口中的compare方法 * 最后将排好序的字符串拼接出来,比较拼接之后的字符串。 * 若ab > ba 则 a >原创 2018-01-06 12:06:10 · 252 阅读 · 0 评论 -
剑指offer解题报告(Java版)——二叉搜索树转换为双向链表 27
剑指offer解题报告(Java版)——二叉搜索树转换为双向链表 27 https://www.cnblogs.com/keedor/p/4467040.html引言 自己觉得对二叉树了解的不是很多,所以想专门练习一下这方面的问题,剑指Offer中有一道题是将二叉搜索树转换为双向链表,开始的时候照着书上的思路去做,最后发现问题很多,看来这本书也有很多问题啊,转载 2017-12-30 12:26:41 · 195 阅读 · 0 评论 -
剑指17_打印从1到最大的n位数(大数问题)
如果输入3,则打印1、2、3、一直到最大的三位数999这是一个典型的大数问题,因为输入的n位数,所能表达的数字可能会超过long long型数字。思路是这样:用数组来保存数字,即如果输入是3则定义一个3维数组 。定义两个函数:一个用来使数组中的数字加1,每次调用该函数,则数组中的数字会加1,但是要保证该数组不溢出,即不超过999.一个用来打印数组。因为最开始原创 2018-01-03 23:01:14 · 267 阅读 · 1 评论 -
剑指_16数值的整数次方
public class Solution { public double Power(double base, int exponent) { double result=0.0; if(equal(base,0.0)&&exponent<0){ throw new Exception("0的负数次幂无意义"); }原创 2017-12-03 16:38:30 · 178 阅读 · 0 评论 -
剑指_矩阵中的路径_回溯法
用回溯法来解决查找矩阵中字符串的路径。第一:定义当前访问字符串的第几个节点pathLength。第二:定义与当前矩阵大小相同bool矩阵来判断当前节点是否被访问visited。第三:解决方案,需要定义两个函数,第一个函数,判断是否找到整个路径结果。第二个函数,依次判断是否在矩阵中找到每个字符。package Jianzhi;public class juzhen_12原创 2017-12-02 18:36:26 · 232 阅读 · 0 评论 -
剑指_实现从后向前遍历的方法
1.要找到尾节点2.定义前后两个指针3.从后向前遍历使用while()遍历class Solution { public: void replaceSpace(char *str,int length) { //遍历一边字符串找出空格的数量 if(str==NULL||length return ;原创 2017-11-29 21:31:56 · 1204 阅读 · 0 评论 -
剑指_二维数组中的查找
public class Solution { public boolean Find(int target, int [][] array) {int rows=array.length;//数组的行数 int columns=array[0].length;//数组的列数 boolean found=false; //int原创 2017-11-26 23:36:21 · 259 阅读 · 0 评论 -
剑指_数组中的重复数字
方法一:public boolean duplicate(int numbers[],int length,int [] duplication) { //找出对应的输出的第一次重复的数字。 if(numbers==null||length //利用额外的数组 //利用两个特点,第一用一个额外的标志位来表示该数字是否出现,如果出现原创 2017-11-26 22:02:59 · 261 阅读 · 0 评论 -
剑指_18.删除链表中的重复数字
1.删除链表中的重复数字关键是如何解决头结点就是重复数字的情况。 public ListNode deleteDuplication(ListNode pHead) { if(pHead==null) return null; ListNode pre=new ListNode(0); ListNode dummy=pre; List原创 2017-12-03 23:05:42 · 210 阅读 · 0 评论 -
剑指42_连续子数组中的最大和
public class Solution { /* 因为数组有正有负最大和一定大于0,所以当出现出现当前最大和小于0时,那么重新开始 用两个cursum 和maxsum来保存当前最大值和最终最大值 当输入的数组是全负数时,那么最大和一定是数组中最大的数。 */ public int FindGreatestSumOfSubArray(int[] a原创 2017-12-31 18:59:09 · 203 阅读 · 0 评论 -
剑指43_1~n整数中1出现的次数
public class Solution { public int NumberOf1Between1AndN_Solution(int n) { int count=0; int i=1; int current=0;//定义当前位数字 int low=0;//定义低位数字 int high=0;//定义高位数字原创 2018-01-03 20:22:49 · 250 阅读 · 0 评论 -
剑指_数组中的逆序对
题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数例如在数组{7,5,6,4}中,一共存在5对逆序对,分别是{7,6},{7,5},{7,4},{6,4},{5,4}。 看 到这个题目,我们的第一反应就是顺序扫描整个数组。每扫描到一个数组的时候,逐个比较该数字和它后面的数字的大小。如果后面的数转载 2018-01-09 17:11:43 · 210 阅读 · 0 评论