查找数组里面的数

有一个int型数组,每两个相邻的数之间的差值不是1就是-1.现在给定一个数,要求查找这个数在数组中的位置。

其实思想就是跳跃查找,因为你知道了一个数,那么它第二个数最多相差1,第三个数最多相差2,而可以用目标数减去这个数来排除一些多余的查找,比如你要的数是10,第一个数是2,那么它前7个数无论如何都达不到10,只有在第8个数才有可能,所以可以直接判断第8个数。

下面是别人的代码借用一下思想大概就是这样:

void PrintfArray(int a[], int n)     {       for (int i = 0; i < n; i++)           printf("%d ", a[i]);       putchar(‘\n‘);     }    int FindNumberInArray(int arr[], int n , int find_number)   {     int next_arrive_index = abs(find_number - arr[0]);     while (next_arrive_index < n)     {       if (arr[next_arrive_index] == find_number)         return next_arrive_index;       next_arrive_index += abs(find_number - arr[next_arrive_index]);     }     return -1;   }
时间: 2024-12-31 04:39:11

查找数组里面的数的相关文章

我的Java开发学习之旅------&gt;使用循环递归算法把数组里数据数组合全部列出

面试题如下:把一个数组里的数组合全部列出,比如1和2列出来为1,2,12,21. (面试题出自<Java程序员面试宝典>) 代码如下: import java.util.Arrays; import java.util.LinkedList; import java.util.List; /** * 把一个数组里的数组集合全部列出,比如1和2列出来为1,2,12,21 */ public class ListAll { public static void main(String[] args

php随机获取数组里面的值

srand() 函数播下随机数发生器种子,array_rand() 函数从数组中随机选出一个或多个元素,并返回.第二个参数用来确定要选出几个元素.如果选出的元素不止一个,则返回包含随机键名的数组,否则返回该元素的键名. array_rand() 函数在你想从数组中取出一个或多个随机的单元时相当有用.它接受 input 作为输入数组和一个可选的参数 num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1.  如果你只取出一个,array_rand() 返回一个随机单元的键名,否则就

PHP递归方式把一个数组里面的null转换为空字符串”的方法

在一些接口的调用中,直接查询数据库出来的字段可能为null字段,但是为了简便前端的判断,需要把null转换成空字符串'',这个时候就需要递归的方式进行.直接上代码如下: //递归方式把数组或字符串 null转换为空''字符串 public function _unsetNull($arr){ if($arr !== null){ if(is_array($arr)){ if(!empty($arr)){ foreach($arr as $key => $value){ if($value ===

获取checkbox数组 里面的值

echo '<td class="text-left"><input  name="tids[]" type="checkbox" id="checkbox_'.$list['tid'].'" value="'.$list['tid'].'"</td>'; var tids = '';                var tmp = [];                $(

hdu--1556--Color the ball (不用循环也可以记录数组里的数)

题目: N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗? 代码: 1 #include<stdio.h> 2 #include<string.h> 3 #define maxn 110000 4 5 int aa[maxn]; 6 7 i

查找数组里相同元素的个数

int[] list = new int[] { 1,1,2,3,1,2,4,3,3,2,4,5,6,5,6,7,3,2,8}; Dictionary<int, int> dic = new Dictionary<int, int>(); foreach (int item in list) { if (!dic.ContainsKey(item)) { dic[item] = 1; } else { dic[item]++; } } foreach (var item in di

PHP 怎么随机获取数组里面的值

注意array_rand随机返回的是KEY值的集合 <?php srand((float) microtime() * 10000000); $input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank"); $rand_keys = array_rand($input, 2); print $input[$rand_keys[0]] . &

算法题之找出数组里第K大的数

问题:找出一个数组里面前K个最大数. 解法一(直接解法): 对数组用快速排序,然后直接挑出第k大的数.这种方法的时间复杂度是O(Nlog(N)).N为原数组长度. 这个解法含有很多冗余,因为把整个数组都排序了,而实际上我们不需要这样做. 解法二(K数组排序): 首先,创建一个长度为K的空数组.从原数组中先挑出K个数进行排序并放到这个空数组中.这一步的时间复杂度是O(Klog(K)). 接着,从剩下的N-K个值中,依次遍历并与上面数组的末尾的数(即里面的最大数)相比较,并插入到合适位置.这一步的时

java实现求一个数组里最大值和最小值之前缺省的数的算法

问题描述: 求一个数组里最大值和最小值之间缺省的数,例如 int arrDemo = {1, 3, 7};  那么就要输出最小值1和最大值7之间缺少的数字2,4,5,6 代码如下,有更好的思路欢迎大家在评论区留言讨论 1 package test; 2 3 public class Test { 4 5 static int[] array = { 6 -10,0,3,3,9 7 }; 8 9 private static void printEmptyItems(int[] array) {