二分搜索
文章平均质量分 57
也非野人
这个作者很懒,什么都没留下…
展开
-
循环有序数组最小值
对于一个有序循环数组arr,返回arr中的最小值。有序循环数组是指,有序数组左边任意长度的部分放到右边去,右边的部分拿到左边来。比如数组[1,2,3,3,4],是有序循环数组,[4,1,2,3,3]也是。给定数组arr及它的大小n,请返回最小值。测试样例:[4,1,2,3,3],5返回:1public int getMin(int[] arr,原创 2016-06-21 15:21:22 · 2259 阅读 · 1 评论 -
元素最左出现
对于一个有序数组arr,再给定一个整数num,请在arr中找到num这个数出现的最左边的位置。给定一个数组arr及它的大小n,同时给定num。请返回所求位置。若该元素在数组中未出现,请返回-1。测试样例:[1,2,3,3,4],5,3返回:2public int findPos(int[] arr, int n, int num) { if(原创 2016-06-21 15:27:01 · 393 阅读 · 0 评论 -
局部最小值位置
定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果arr[0]<arr[1],那么arr[0]是局部最小;如果arr[N-1]<arr[N-2],那么arr[N-1]是局部最小;如果0<i<N-1,既有arr[i]<arr[i-1]又有arr[i]<arr[i+1],那么arr[i]是局部最小。 给定无序数组arr,已知arr中任意两个相邻的数都不原创 2016-06-21 15:28:54 · 1273 阅读 · 0 评论 -
最左原位
有一个有序数组arr,其中不含有重复元素,请找到满足arr[i]==i条件的最左的位置。如果所有位置上的数都不满足条件,返回-1。给定有序数组arr及它的大小n,请返回所求值。测试样例:[-1,0,2,3],4返回:2public int findPos(int[] arr, int n) { if (arr.length == 0 || n == 0)原创 2016-06-22 11:15:45 · 299 阅读 · 0 评论 -
快速N次方
如果更快的求一个整数k的n次方。如果两个整数相乘并得到结果的时间复杂度为O(1),得到整数k的N次方的过程请实现时间复杂度为O(logN)的方法。给定k和n,请返回k的n次方,为了防止溢出,请返回结果Mod 1000000007的值。测试样例:2,3返回:8思路:以10^13为例,首先我们将13以二进制表示如下:0000 110110原创 2016-06-22 11:17:42 · 1847 阅读 · 0 评论