剑指Offer
刷剑指Offer自己的题解,理解别人优秀解题方式,并写出自己的思路
x方
这个作者很懒,什么都没留下…
展开
-
JZ29-最小的K个数
题目描述给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组样例输入输出输入[4,5,1,6,2,7,3,8],4 返回值[1,2,3,4]解决方法方法一利用最大堆保存这k个数,每次只和堆顶比,如果比堆顶小,删除堆顶,新数入堆。import java.util.*;public class Solution { public ArrayList<I原创 2021-04-16 11:53:19 · 166 阅读 · 0 评论 -
JZ28-数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。样例输入输出输入[1,2,3,2,2,2,5,4,2]返回值2解决方法方法一遍历数组通过map存放元素以及出现次数,遍历结束之后对map中的entrySet进行遍历,如果有超过数组长度一半的元素就进行输出。代码实现import java.util.*;publi原创 2021-04-16 10:52:55 · 102 阅读 · 0 评论 -
JZ19-顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.样例输入输出输入[[1,2],[3,4]]返回值[1,2,4,3]解决思路获取矩阵的左右边界以及上下边界,通过四个for循环表示一圈打印(同时要判断单行单列等特殊情况),外层套一层while循环保证起始遍历元素原创 2021-04-15 11:46:50 · 184 阅读 · 0 评论 -
z13-调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。样例输入输出输入[1,2,3,4]返回值[1,3,2,4]解决方法解决方法一import java.util.*;public class Solution { public int[] reOrderArray (int[] array) { for(int i=0; i <原创 2021-04-11 21:11:21 · 116 阅读 · 0 评论 -
JZ6-旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。非递减是指后面的大于等于前面的,递增是指后面的大于前面的。123345和123456的区别样例输入输出输入[3,4,5,1,2]返回值1解答该题为二分法的变种,没有target目标值需要考虑以下三种情况array[mid] > array[high]:类似于456123,arra原创 2021-04-11 15:44:02 · 109 阅读 · 0 评论 -
JZ1-二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。样例输入输出[ [1,2,8,9], [2,4,9,12], [4,7,10,13], [6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。暴力法直接两次for循环遍历,将所有元素全都遍历一次,找到就返回true,没有找到就返回fals原创 2021-04-11 12:15:13 · 99 阅读 · 0 评论