
剑指offer
⚡️用Java语言实现一遍《剑指offer》,书中是C++实现的⚡️
路灯下的篮球场
一步一个脚印,努力凿成一名优秀的工程狮
展开
-
剑指offer - 字符串的排列
题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解题思路:对于这个问题,我们同样可以采用分解的办法。要求整个字符串的排列,可以看成两步:第一步:求所有可能出现在第一个位置的字符,即把第一个字符与后面的字符依次交换。第二步:固定一个字符,求后面所有字符的排列。很明显,求后面所有字原创 2020-07-19 10:22:10 · 234 阅读 · 0 评论 -
剑指offer - 数字在排序数组中出现的次数
数字在排序数组中出现的次数题目描述:统计一个数字在排序数组中出现的次数。例如,输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于数字3在该数组中出现了4次,所以函数返回4。解题思路:二分查找既然输入的数组是有序的,所以我们就能很自然的想到用二分查找算法。以题目中给的数组为例,一个比较自然的想法是用二分查找先找到一个3,由于要计算的是输出的次数,所以需要在找到的这个3的左右两边分别再进行顺序扫描,进而得到3的个数,这样最坏的情况下时间复杂度仍然是O(n),和直接顺序扫描的效率.原创 2020-07-06 09:27:09 · 162 阅读 · 0 评论 -
剑指offer - 反转链表
15.反转链表题目描述输入一个链表,反转链表后,输出新链表的表头。1–>2–>3–>4–>null反转成4–>3–>2–>1–>null思路一定义两个节点,向后移动并改变逆转指向package main.java.com;public class Title15 { public ListNode ReverseList...原创 2020-04-16 11:59:49 · 180 阅读 · 0 评论 -
剑指offer - 用两个栈实现队列
7.用两个栈实现队列题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:通过两个栈中元素之间的复制交换实现了队列,栈一负责接收节点数据栈二负责弹出数据,由栈的特性可知栈弹出的数据即为栈一中顺序输入的顺序复杂度push时间复杂度:O(1)pop空间复杂度:O(1)import java.util.Stack;...原创 2020-04-14 23:38:05 · 195 阅读 · 0 评论 -
剑指offer - 从尾到头打印链表
3.从尾到头反转链表3.从尾到头反转链表题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。本题的递归方法会让你对递归有更深的理解思路一:暴力顺序遍历一遍存储到临时集合templist中,在定义一个集合逆序遍历存储到list(不推荐)public class Title3 { public static ArrayList<Integer&g...原创 2020-04-12 17:33:04 · 225 阅读 · 0 评论 -
剑指offer - 替换空格
5.替换空格题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路// 那我首先想到的是使用额外空间的解法,使用StringBuffer字符串缓冲区,或StringBuider// 首先遍历target目标字符串,且在遍历的同时将不是空格的字符append到Stri...原创 2020-04-07 00:15:27 · 122 阅读 · 0 评论 -
剑指offer - 构建乘积数组
4.构建乘积数组题目描述给定一个数组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[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)思路一:设置两个数组分别装B[i]...原创 2020-04-06 11:39:56 · 207 阅读 · 0 评论 -
剑指offer - 数组中的重复数字
3.数组中的重复数字题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。先说一下底下的duplicate方法大意,boolean:判断数组中某个数出现次数是否大于1...原创 2020-04-02 23:43:38 · 132 阅读 · 0 评论 -
剑指offer - 旋转数组中的最小数字
2. 旋转数组的最小数字题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路一:暴力遍历法,依次查找比较寻出最小值,这种方法没什么意义,因为时间复...原创 2020-03-30 18:03:24 · 126 阅读 · 0 评论 -
剑指offer - 二维数组中的查找
1. 二维数组中的查找题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路一: 暴力遍历法,按顺序将二维数组遍历一遍即可找到该数时间复杂度O(n^2)空间复杂度O(1)public class Title1 { ...原创 2020-03-30 17:41:52 · 127 阅读 · 0 评论