随笔 - 482  文章 - 2 评论 - 46 trackbacks - 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]。不能使用除法。 1. 这题的意思是 B数组的元素是A数组中所有元素的乘积,但是要排除掉当前元素2. 阅读全文
posted @ 2018-09-25 23:40 陶士涵 阅读(20) 评论(0) 编辑
摘要: 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 1.哈希法 2.定义备用数组,作为哈希使用,key是原数组每个元素 value是出现的次数 3.遍历哈希数组 hash for...阅读全文
posted @ 2018-09-22 00:34 陶士涵 阅读(40) 评论(0) 编辑
摘要: 快速排序: 1.基于二分的思想 2.第一个作为基准数,左右各一个指针,同时扫描,右边先走,找到比基准数小的停下 左边再走,找到比基准数大的停下,左右交换 3.当左右相遇的时候,把当前的和基准数调换,递归调用 4.快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它的平均时间复杂度为O(NlogN) quickSort &arr,left,right if left>right ...阅读全文
posted @ 2018-09-21 16:43 陶士涵 阅读(37) 评论(0) 编辑
摘要: 统计一个数字在排序数组中出现的次数。 1.有序的数组查找,使用二分法 2.二分法查找第一次出现的位置,二分法查找最后一次出现的位置,end - start +1 left=getLeft(data,k) right=getRight(data,k) retun right-left+1 getLeft data,k left=0 right=arr.length-1 ...阅读全文
posted @ 2018-09-20 22:06 陶士涵 阅读(40) 评论(0) 编辑
摘要: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 1.数组归并排序 2.归并排序比较左右两个堆数组中的元素大小时,进行计数,倒着比较,因为左堆倒第一如果比右堆倒第一大,那么就比右堆的所有都大 mergeSort if left<ri...阅读全文
posted @ 2018-09-19 23:19 陶士涵 阅读(39) 评论(0) 编辑
摘要: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 解法1 1.数组排序,使用自定义排序规则是 a.b>b.a a 和 b互换位置 2.usort函数的使用 function costomcomp(a,b) return a.b > b.a usort(arr...阅读全文
posted @ 2018-09-18 22:14 陶士涵 阅读(39) 评论(0) 编辑
摘要: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 两种方式: 1.定义一个新数组arr,遍历数组给arr赋值,arr[元素]=出现的次数 2.排序下arr,取第一个的key和value,key是目标元素,value是出现次数,验证下后...阅读全文
posted @ 2018-09-17 21:54 陶士涵 阅读(41) 评论(0) 编辑
摘要: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 1.遍历数组,判断元素奇数偶数,push进新数组,空间换时间 2.插入排序的思想 空间上是原址排序 2.1从前往后遍历,判断当前的是奇数 2.2从当前的开始,从后往...阅读全文
posted @ 2018-09-16 20:19 陶士涵 阅读(31) 评论(0) 编辑
摘要: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 1.利用二分法寻找数组中的最小元素 2.定义两个 指针left和right,指向数组的第一个元素和最后一个元素,定义一...阅读全文
posted @ 2018-09-15 21:53 陶士涵 阅读(32) 评论(0) 编辑
摘要: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 1.二维数组,行row从左到右递增,列col从上到下递增 2.定左下角为比较点,比它大的位于它右边,因此col++,并且col=0 col=0 row=arr.length-1 while row>=0...阅读全文
posted @ 2018-09-14 19:26 陶士涵 阅读(23) 评论(0) 编辑