![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指Offer
weixin_39137699
阳光,热情,幽默
展开
-
剑指offer4:二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。存在则返回true,不存在则返回false.1.首先题目的每一行从左到右依次递增,每列从左到右依次递增,这样本身就是一个可以利用的隐含条件。2.题目的切入点很艹蛋的妙,从右上角做为起始点,每次比较如果...原创 2019-04-15 19:41:00 · 73 阅读 · 0 评论 -
剑指Offer17:打印从1到最大的n位整数
例如:n = 3,打印从 1 ,2,3......999这么多的整数.思路:介绍最主要的思路,主要是对边界问题的处理,当n<=0return结束。其次就是1,2,3,前面不能带有001,002,必须处理一下当char[i]!='0'即可输出。for(int i=0;i<nlen;i++){ if(isPrint0&&len[i]!='0'){ ...原创 2019-04-20 15:30:54 · 115 阅读 · 0 评论 -
剑指Offer18:删除链表的节点
思路:一般删除链表的节点,通过O(n)遍历到删除链表的前一个节点,然后将前一个节点的next指向删除节点的next,再删除需要删除的节点。但是,如果删除的节点指针知道,那么,拿到删除节点的下一节点v,将v的值复制到当前删除节点的值,再让当前删除节点的Next指向v的next,这个方法很惊艳同时需要判断当前删除的是不是头结点和尾节点重合,第二种情况是删除的节点处于尾节点,任就需要遍历到删除节...原创 2019-04-20 15:52:42 · 58 阅读 · 0 评论 -
剑指Offer39:数组中出现次数超过一半的数字
题目就是从一个数组中找到其中一个值其个数超过数组的一半、定义一个int result,int times次数,因为如果存在一个值超过数组长度的一半,那么times必定为1首先 result = nums[0],times = 1;然后从1开始循环数组,判断if(times==0)如果为0就result = nums[i],times =1.再判断result = nums[...原创 2019-04-30 16:45:32 · 59 阅读 · 0 评论 -
剑指Offer:最小的k个数
题目:输入N个整数,找出其中最小的k个数。例如,输入4,5,1,6,2,7,3,8.最小的4个数字是1,2,3,4.思路:就是把那个容器只能存k个数,当容器未满时,直接往里添加元素,而元素已满,那么拿其中最大的数与当前需要添加的数进行比较,如果容器内最大的数大于需要添加进来的数,那么将当前容器比较的数与添加的数交换。那么优先级队列做个数据容器再好不过,我们每次拿,存数据,这一数据结构本身就很...原创 2019-04-30 19:36:20 · 72 阅读 · 0 评论 -
剑指Offer:连续子数组的最大和
题目:输入一个整型数组,数组里有正也有负,数组中的一个或者多个连续整数,组成一个子数组,求所有子数组的和的最大值。输入1,-2,3,10,-4,7,2,-5。提一下,当没有思路的时候,从画图,举例子,分解问题入手思路一:当遍历第一个数,加入sum,如果sum<=0,即sum+=nums[i],如果sum>0,即连续的sum+=num[i+1],那么还有一种情况就是,在连续的正数...原创 2019-05-01 14:05:24 · 86 阅读 · 0 评论 -
剑指Offer51:数组中的逆序对
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。eg:输入数组 7,5,6,4.共存在5个逆序对,{7,6},{7,5},{7,4},{6,4},{5,4}。暴力法,即第一次遍历n个数的过程中,从n+1…往下,时间复杂度是O(n2)。书上的更快的方法:即借助,归并排序的思想,将数组划分成为2个子数组,再在2个...原创 2019-05-14 15:21:09 · 70 阅读 · 0 评论 -
剑指Offer:和为s的连续正整数序列
输入一个s,打印出所有和为s的连续正整数序列(至少含有2个数)。例如,输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以打印出3个连续序列1-5,4-6,7-8.代码: 因为这里并不是从传入的一个数组中进行的查找,而是从连续的正整数序列。void FindContion(int sum){if( sum<3){return;}int small = 1;int mi...原创 2019-05-19 15:40:04 · 269 阅读 · 0 评论 -
剑指Offer58:翻转字符串
因为之前好像在哪看过类似这样的题目,但是看到第二小问,第一时间脑海没有解题思路,于是记录一下。题目一:翻转单词顺序输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a student.”书上给的思路是:第一步翻转句子中所有的字符。比如翻转 “I am a student.”中所有字符得到“.tneduts a m...原创 2019-05-19 17:06:13 · 707 阅读 · 0 评论 -
剑指Offer47:礼物的最大价值
在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?目的:从左上角到右下角,并且只能向左或者向下移动一格。定义f(i,j)为到达(i,j)位置格子时能拿到的礼物总和的最大值书第一次是二维数组保存结果,为了优化,采...原创 2019-05-12 17:26:50 · 163 阅读 · 0 评论 -
剑指Offer55:二叉树的深度&&leetcode110平衡二叉树的深度
主要题目leetcode:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。给定二叉树[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回true。示例 2:给定二叉树[1,2,2,3,3,n...原创 2019-05-17 11:42:22 · 94 阅读 · 0 评论 -
剑指Offer33:二叉搜索树的后序遍历序列
题目:输入一个数组,判断该数组是否是某二叉搜索树的后序遍历结果,如果是返回true,不是返回false。假设输入的数组的任意两个数字都不相同,例如,输入数组{5,7,6,9,11,10,8},返回true,因为满足书上的树,如果输入的是{7,4,6,5},因为不满足这个树,所以返回fasle.思路:后序遍历,最后一个节点都是根节点,那么从开始一定是左子树的节点部分,后面紧接着的是右子树的...原创 2019-04-24 17:12:46 · 67 阅读 · 0 评论 -
剑指Offer28:对称的二叉树
题目:请实现一个函数,用来判断一棵二叉树是否是对称的,如果一棵二叉树和它的镜像一样,那么它是对称的。这里第一颗树是对齐的,第二颗树不是对齐的,第三颗树也不是。通常二叉树有前序,中序,后序遍历方法,而书上提出以前序对称的遍历方法,即第一颗树前序遍历的顺序是 8,6,5,7,6,7,5 而前序对称的遍历(根右左次序) 8,6,5,7,6,7,5 即和前序遍历一样,但是用这个方法去...原创 2019-04-29 09:23:11 · 221 阅读 · 0 评论 -
剑指Offer15:二进制中1的个数
题目:请实现一个函数,输入一个整数,输出整数中二进制中的1的个数。介绍一个书中的 位运算的情况1.与& 0&0=0 0&1=0 1&0=0 1&1=12.或| 0|0=0 0|1=1 1|0=1 1|1=13.异或^ 0^0=0 0^1=1 1^0=1 1^1=04.左移 << 直接在二进...原创 2019-04-19 20:04:10 · 76 阅读 · 0 评论 -
剑指offer5:替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。1.对于这种数组复制题目,主要从后往前处理。2.Java来写最好是StringBuilder 加上reverse.toString来处理3.2个指针,p1指针指向原数组的末尾,P2指针指向新复制的数组的末尾,当p1不为空时,p1复...原创 2019-04-15 21:03:06 · 154 阅读 · 0 评论 -
剑指offer6:从尾到头打印链表
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。1.用栈保存结果,再输出2.三指针调转指针指向,再反向输出3.能用栈解决,就能递归调用输出(但是链表长度过长,容易发生溢出)附上递归代码:package com.hnist.lzn.jinazhioffer;public class Reverselist { class ListNode{...原创 2019-04-15 21:35:31 · 80 阅读 · 0 评论 -
剑指offer7:重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:用到了树,一般采用递归的方法来解题,其次就是本题有分治法的思想在里面。首先将一个大问题,分解成2个小问题,左子树和右子树,数据规模减少,但是处理的方...原创 2019-04-16 10:32:02 · 73 阅读 · 0 评论 -
剑指offer11:旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:1.直接点,没办法的情况用个快速排序把。第一元素就是快速排序。2.思路,本身数组就是有序,就算是旋转...原创 2019-04-16 16:41:57 · 70 阅读 · 0 评论 -
剑指Offer22:链表中倒数第k个节点
题目:输入一个链表,输出倒数第k个元素,符合大多数人的习惯,最后一个节点,就表示最后一个。思路:让第一个节点走k-1步,再让第二个节点开始走,这样第一个节点指向最后一个节点的时候,第二个节点就指向,倒数第k个节点。但是,我这里强调一下写代码的健壮性,就是你的代码得应对一下不可预料的情况,你得对错误或者不符合的情况进行排除。代码: class ListNode{ i...原创 2019-04-20 19:22:07 · 86 阅读 · 0 评论 -
剑指Offer24:反转链表
定义一个函数:输入一个链表的头结点,反转该链表并输出反转后链表的头节点。思路:写出健壮性的代码的前提,最好写代码之前想出全面的测试用例。1.头结点为Null 2 .只有一个节点的头结点 3.多个节点的头结点。判断头节点是否为Null ,是return null ,若是一个头节点则return 这个节点。定义其他的2个指针,pre和next指针置null,再while(...原创 2019-04-20 20:16:20 · 81 阅读 · 0 评论 -
剑指Offer25:合并2个排序的链表
链表l1排序,链表l2也是排序的,将2个链表按递增的序列排成一个新链表。思路:如果l1,为空返回l2, l2为空,返回l1, l1,l2都为空,直接返回nulll1,l2都不为空,排列. class ListNode { int value; ListNode next; public ListNode(int value...原创 2019-04-20 21:11:56 · 53 阅读 · 0 评论 -
剑指Offer38:字符串的全排列
字符串的全排列当输入a,b,c三个字符串的时候,请输出它的全部排列情况.思路:当我们进行一个问题的解决的时候,尝试把问题分解成小问题,把一个字符串分成一个字符和n-1个字符,然后交换第一个字符和n-1个字符中的全部,然后继续固定第二个字符,继续排列n-2个字符串,这样不断继续下去,就是全排列。思路:`List res = new ArrayList<>();public Lis...原创 2019-04-25 20:45:27 · 111 阅读 · 0 评论 -
剑指Offer12:矩阵中的路径
请设计一个函数,用来判断矩阵中是否存在包含某一条字符串的所有路径,路径可以从任意一格开始,上下左右,一条路径经过矩阵某一格,不可以再次进入。在char[][] nums= {{'a','b','t','g'},{'c','f','c','s'},{'j','d','e','h'}}; 有一个bfce的路径,判断是否存在,存在返回true,不存在返回false。思路:有点想深度搜索的,不过...原创 2019-04-17 21:04:12 · 57 阅读 · 0 评论 -
剑指Offer32:打印二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印.思路:通过举例子画图,明白了用队列来存储点,当打印当前点的时候,判断当前有子节点吗?有,就将子节点加入队列,无,就不加。但是这里并不打算详细介绍这个,而是2道变式题。1.分行从上到下打印二叉树。8 ...原创 2019-04-23 15:25:09 · 57 阅读 · 0 评论 -
剑指offer最长不含重复字符的子字符串
题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度,假设字符串中只包含‘a’-'z'的字符。例如,在字符串“arabcacfr”中,最长的不含重复字符的子字符串是"acfr",长度为4.//数组 最长不重复的字符串长度 // 动态规划 public static void gui(String str){ if(st...原创 2019-09-27 17:54:22 · 75 阅读 · 0 评论