![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数组类算法
文章平均质量分 72
william_919
这个作者很懒,什么都没留下…
展开
-
[剑指offer] 数组中只出现一次的数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。解题思路法一:大家都能想到的HashMap法法二:异或法任何一个数字异或它自己都等于0。如果数组中只一个数字是只出现一次的,其他数字都是成双成对出现的,那么我们从头到尾依次异或数组中的每个数字,最终的结果刚好就是那个只出现一次的数字,因为那些成对出现两次的数字全部在异或中抵消了。那么...原创 2019-04-22 11:06:06 · 101 阅读 · 0 评论 -
[剑指offer] 数字在排序数组中出现的次数
题目描述统计一个数字在排序数组中出现的次数。解题思路正常的思路就是二分查找了,我们用递归的方法实现了查找k第一次出现的下标,用循环的方法实现了查找k最后一次出现的下标。除此之外,还有另一种奇妙的思路,因为data中都是整数,所以我们不用搜索k的两个位置,而是直接搜索k-0.5和k+0.5这两个数应该插入的位置,然后相减即可。参考代码法一://普通循环查找public class S...原创 2019-04-19 17:56:13 · 112 阅读 · 0 评论 -
[剑指offer] 把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。参考代码public class Solution { public static String PrintMinNumber(int [] numbers) { int n; ...原创 2019-04-19 17:35:29 · 164 阅读 · 0 评论 -
[剑指offer] 连续子数组的最大和
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度...原创 2019-04-19 16:10:39 · 91 阅读 · 0 评论 -
[剑指offer] 最小的K个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。解题思路两种方法:法1:先对数组排序,然后取出前k个。法2:利用最大堆保存这k个数,每次只和堆顶比,如果比堆顶小,删除堆顶,新数入堆。参考代码法1:(这里我们顺便复习下手动排序,我们选择插入排序)public class Solution { p...原创 2019-04-19 15:40:38 · 115 阅读 · 0 评论 -
[剑指offer] 斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39解题思路公式:f(n) = n, n <= 1f(n) = f(n-1) + f(n-2), n > 1可以直接使用递归的方法:if(n<=1) return n;else return Fibonacci(n-1)+Fibonacci(...原创 2019-04-24 10:24:01 · 192 阅读 · 0 评论 -
[剑指offer] 数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解题思路三种解法:法1:借助hashmap存储数组中每个数出现的次数,最后看是否有数字出现次数超过数组长度的一半;法2:排序。数组排序后,如果某个数字出现次数超过数组的长...原创 2019-04-19 00:20:55 · 108 阅读 · 0 评论 -
[剑指offer] 顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.解题思路先得到矩阵的行和列数,然后依次旋转打印数据,一次旋转打印结束后,往对角分别前进和后退一个单位。要注意单行和单列的情况...原创 2019-04-19 00:20:41 · 76 阅读 · 0 评论 -
[剑指offer] 调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解答import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Solution { pub...原创 2019-04-19 00:20:21 · 73 阅读 · 0 评论 -
[剑指Offer] 旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解答:转换成普通寻找数组最小值问题public class Solution { public in...原创 2019-04-18 20:12:15 · 93 阅读 · 0 评论 -
[剑指Offer] 二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解答一:直接循环求解public class Solution { public static boolean Find(int target, int [][] array) {...原创 2019-04-18 19:54:09 · 89 阅读 · 0 评论 -
[剑指offer] 滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5...原创 2019-04-22 15:51:47 · 132 阅读 · 0 评论 -
[剑指offer] 构建乘积数组
题目描述给定一个数组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]的值可以看作图中矩阵第 i 行所有元素的乘积。我们可以先算下三角中的连乘,即我们先算出B[i]中的一部分,然后倒过来按上三角中的分布规律,把另一部分也乘进去。参考代码public cla...原创 2019-04-22 14:41:03 · 151 阅读 · 0 评论 -
[剑指offer] 数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。解题思路最简单的就是用一个数组或者哈希表来存储已经遍历过的数字,但是这样需要开辟额外的空间。如果题目要求不能开辟额外的...原创 2019-04-22 14:35:21 · 134 阅读 · 0 评论 -
[剑指offer] 孩子们的游戏(圆圈中最后剩下的数)
题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数….这样下去….直到剩下最...原创 2019-04-22 14:22:53 · 92 阅读 · 0 评论 -
[剑指offer] 扑克牌顺子
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子……LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5...原创 2019-04-22 14:15:30 · 89 阅读 · 0 评论 -
二分查找:非递归实现和递归实现
二分查找简介二分查找的条件是对一组有序数组的查找,这一点很容易忘记,在使用二分查找的时候先要对数组进行排序。先说一下二分查找的思路:一个有序数组,想要查找一个数字key的下标,首先算出中间下标mid,利用mid把这个数组分为两半,前一半从下标0到mid-1,后一半从mid+1到数组最后一个元素(下标是数组长度减一)。把这个查找的元素key和数组下标为mid的元素进行比较,也就是和中间那个元素进...原创 2019-04-19 18:00:44 · 329 阅读 · 0 评论