在一个非递减数组中找到绝对值最小的数字
2012-10-16 10:21
393 查看
1、如果都是正数,则是值最小的那个。
2、如果都是负数,则是值最大的那个。
3、如果有整数有负数,则应该找到整数和负数的分界线位置,绝对值最小的数在哪个位置。
参见这里
其中,在第三个情况里面,可以使用二分搜索。
low和high两个指针,
如果mid跟lowd的符号相同,则low=mid,
如果mid跟high的符号相同,则high=mid,
直到low==high或者low+1==high的时候,
如果low==high了,那么这个位置就是要返回的位置,
如果low+1==high了,那么判断这两个位置的绝对值,小的那个就是要返回位置了。
2、如果都是负数,则是值最大的那个。
3、如果有整数有负数,则应该找到整数和负数的分界线位置,绝对值最小的数在哪个位置。
参见这里
其中,在第三个情况里面,可以使用二分搜索。
low和high两个指针,
如果mid跟lowd的符号相同,则low=mid,
如果mid跟high的符号相同,则high=mid,
直到low==high或者low+1==high的时候,
如果low==high了,那么这个位置就是要返回的位置,
如果low+1==high了,那么判断这两个位置的绝对值,小的那个就是要返回位置了。
相关文章推荐
- 数组A,有一千万个数,数组B同样也有千万多个数,然后从A和B当中随意找一个数字A1和B1,A1-B的绝对值是C,保证C最小。求A1和B1
- 求一个数组差的绝对值的最小值
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 一个有序数组(从小到大排列),数组中的数据有正有负,求这个数组中的最小绝对值
- 数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小,数组中的数的取值范围是0<x<100,元素个数也是大于0, 小于100 。
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。剑指Offer(32)
- 有一个整数数组,请求出两两之差绝对值的最小值
- 微软面试-101-有一个整数数组,请求出两两之差绝对值最小的值,
- 给定一个数组,找出不在数组中的最小的那个数字
- 数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小,数组中的数的取值范围是0<x<100,元素个数也是大于0, 小于100 。
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 有一个整数数组,请求出两两之差绝对值最小的值
- 把数组中数字连起来组成一个最小的数字
- 转:最小区间:k个有序的数组,找到最小区间使k个数组中每个数组至少有一个数在区间中
- 数组A中,除了某一个数字x之外,其他数字都出现了三次,而x出现了一次。请给出最快的方法,找到x
- 在数组中找到至少包含一个数字的子阵具有最大的乘积
- 给定一个递增排序的数组和一个数字s,求数组中和为s的俩个数。求乘积最小的俩个数