数组
写吧HJ
向着数据研发工程师不断努力
展开
-
二维数组中的查找
题目描述 来自《剑指offer》的原题,但是实现了两种方法并对时间效率进行了测试。 解题思路 第一种 – 二维矩阵中的二分法 这种方法思路跟剑指offer原文中的思路相似 step1: 规定矩阵size ⇒ (m, n) step2: 建立坐标点上下限 ⇒ x = (0,m-1), y = (0,n-1) step3: 通过二分法逐步确定我们所选取点的坐标,比如第一步为((0 + m-1)/2,...原创 2019-03-25 13:26:38 · 114 阅读 · 0 评论 -
扑克牌顺子
题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张...原创 2019-04-23 14:56:08 · 102 阅读 · 0 评论 -
滑动窗口的最大值
题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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-23 14:54:18 · 86 阅读 · 0 评论 -
数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 解题思路 这道题是归并排序的变形。我在思考的时候也想到可以用分治的思想来解决,但是在两个子数组如何合并的问题上没有想清楚。 这道题的解题代码,其实可以在归并排序的基础上进行。其与归并排序...原创 2019-04-23 14:51:20 · 102 阅读 · 0 评论 -
和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 解题思路 代码 public Array...原创 2019-04-23 14:48:24 · 100 阅读 · 0 评论 -
把数组排成最小的数
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 解题思路 数组中所有的数拼接后有可能会超过整数的范围,因此本题必须要使用字符串来处理。 要对3,32 ,321 排序,不能直接比较32,3的大小,应该比较323,332的大小,即,3,32的大小应该有323,33...原创 2019-04-23 14:45:47 · 85 阅读 · 0 评论 -
数组中的逆序对 - java实现
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 解题思路 - 来自《剑指offer》 这道题是归并排序的变形。我在思考的时候也想到可以用分治的思想来解决,但是在两个子数组如何合并的问题上没有想清楚。 这道题的解题代码,其实可以在归并排...原创 2019-04-08 23:25:28 · 268 阅读 · 0 评论 -
和为S的两个数字
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 思路 1、枚举 固定一个数字,然后依次判断数组中该数字后面的数字与它的和是不是等于s。 时间复杂度:O(n^2) 2、前后遍历 利用排序数组的规律,定义两个指针,分别指向数组的首尾,如果两个指针所指的数字大于s,则尾指针-1;如果小于s,则首指针+1;如果等于...原创 2019-04-08 00:42:24 · 51 阅读 · 0 评论 -
旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 解题思路 二分查找 Step1.和二分查找法一样,我们用两个指针分别指向数组的第一个元素和最后一个元素。 Ste...原创 2019-04-08 00:39:05 · 64 阅读 · 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中元素的组成,其实是两个累乘积的乘积,两个累乘积分别是:A[0]A[1]…A[i-1] 和 A[i+1]…*A[n-1]。 首先,将B构建成一个如下数组:B[i] =A[0]A[1]…*A[...原创 2019-04-08 00:20:59 · 58 阅读 · 0 评论 -
数组中只出现一次的数字
思路 首先:位运算中异或的性质:两个相同数字异或=0,一个数和0异或还是它本身。 当只有一个数出现一次时,我们把数组中所有的数,依次异或运算,最后剩下的就是落单的数,因为成对儿出现的都抵消了。 依照这个思路,我们来看两个数(我们假设是AB)出现一次的数组。我们首先还是先异或,剩下的数字肯定是A、B异或的结果,这个结果的二进制中的1,表现的是A和B的不同的位。我们就取第一个1所在的位数,假设是第3位...原创 2019-03-31 23:52:12 · 64 阅读 · 0 评论 -
最小的k个数
题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 解题思路 思路1 思路2 总结 代码 public class GetLeastNumbers_Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int []nums...原创 2019-04-10 11:53:16 · 70 阅读 · 0 评论 -
数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 解题思路 需要注意的是,以上方法只求出了数组中最高频率的数字。如果出现频率最高的数字都没有满足数组长度一般的要求,那么就会出现错误。 所以我们在遍历完一遍数组之后,需要对结果进...原创 2019-04-10 11:50:10 · 67 阅读 · 0 评论 -
最大乘积 – 拼多多2018笔试
题目描述 解题思路 设max1、max2、max3分别为第1大到第3大的数,min1、min2分别为第1小到第2小的数。 思路: 如果数组中全是正数:结果为max1max2max3 如果数组中全是负数:结果为max1min1min2 如果数组中有正有负:结果为:max{ max1max2max3,max1min1min2} 解题方法: 在遍历数组是需要记录第一,第二,第三大,和最小...原创 2019-04-23 14:59:19 · 110 阅读 · 0 评论