小金的询问——二分查找 朴灿烈づ我的快乐病毒、 2022-06-16 02:42 147阅读 0赞 Think: 1有序数组+查询,思考可否用二分查找(二分法思想) [sdut题目链接][sdut] 小金的询问 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 给定一个有序(升序)数字数组A,查找数字target,若target在数组中出现,返回位置,若不存在,返回它应该插入的位置 Input 多组输入。 每组输入第一行输入两个整数n,m,分别代表数组长度和询问次数; 第二行输入n个整数,为数字A的所以元素,数据保证没有重复元素; 接下来的m行,每行一个正整数表示询问的target。 Output 若target在数组中出现,输出taeget的位置,若不存在,输出它应该插入的位置。 Example Input 4 2 1 2 3 4 2 0 Example Output 2 1 Hint Author 2015级《程序设计基础II》计科软件通信期末上机考试2 以下为Wrong Answer代码 错误原因:相对较大值返回错误,题意理解不完全 #include <stdio.h> #include <string.h> #include <stdlib.h> int b[19980414]; void Search(int a[], int left, int right, int x); int main() { int n, m, i, x; while(scanf("%d %d", &n, &m) != EOF){ for(i = 1; i <= n; i++) scanf("%d", &b[i]); while(m--){ scanf("%d", &x); Search(b, 1, n, x); } } return 0; } void Search(int a[], int left, int right, int x) { int k, i = left, j = right; if(i > j) return; if(a[i] > x){ printf("%d\n", i); return; } else if(a[j] < x){ printf("%d\n", j); return; } k = (i+j)/2; if(a[k] < x) Search(a, k+1, right, x); if(a[k] > x) Search(a, left, k-1, x); if(a[k] == x) printf("%d\n", k); } /*************************************************** User name: Result: Wrong Answer Take time: 56ms Take Memory: 464KB Submit time: 2017-05-03 15:22:29 ****************************************************/ 以下为Accepted代码 #include <stdio.h> #include <string.h> #include <stdlib.h> int b[19980414]; void Search(int a[], int left, int right, int x); int main() { int n, m, i, x; while(scanf("%d %d", &n, &m) != EOF){ for(i = 1; i <= n; i++) scanf("%d", &b[i]); while(m--){ scanf("%d", &x); Search(b, 1, n, x); } } return 0; } void Search(int a[], int left, int right, int x) { int k, i = left, j = right; if(i > j) return; if(a[i] > x){ printf("%d\n", i); return; } else if(a[j] < x){ printf("%d\n", j+1); return; } k = (i+j)/2; if(a[k] < x) Search(a, k+1, right, x); if(a[k] > x) Search(a, left, k-1, x); if(a[k] == x) printf("%d\n", k); } /*************************************************** User name: Result: Accepted Take time: 52ms Take Memory: 508KB Submit time: 2017-05-03 15:33:12 ****************************************************/ [sdut]: http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/2160/pid/3536
相关 【算法小课堂】二分查找算法 ![在这里插入图片描述][33d2e4fee507480c872f9601d3d1a8a4.png_pic_center] 简单思路: 当我们要从一个序列中查找一个元素 一时失言乱红尘/ 2024年02月25日 02:29/ 0 赞/ 50 阅读
相关 二分查找 二分查找可以说是在经典不过的查找算法了,比如JAVA的库函数里,就有相应的代码实例。如下写出两个版本的二分查找,非递归和递归的 非递归的 public int bi 系统管理员/ 2022年08月06日 16:24/ 0 赞/ 53 阅读
相关 小金的询问——二分查找 Think: 1有序数组+查询,思考可否用二分查找(二分法思想) [sdut题目链接][sdut] 小金的询问 Time Limit: 1000MS Memory 朴灿烈づ我的快乐病毒、/ 2022年06月16日 02:42/ 0 赞/ 148 阅读
相关 二分查找 //二分查找 /\ 递归算法 int searchB1(int A\[\], int low, int high, int data); 非递归算法 int 绝地灬酷狼/ 2022年05月12日 01:40/ 0 赞/ 43 阅读
相关 查找——二分查找 基本思想 二分查找是建立在有序顺序表基础上的!步骤如下: 1. 将表中间位置记录的关键字与给定K值进行比较,若两者相等,则查找成功。 2. 蔚落/ 2022年03月27日 03:46/ 0 赞/ 375 阅读
相关 二分查找 二分查找(先排序) typedef struct LNode List; struct LNode{ ElemenType Data[MAXSIZ 爱被打了一巴掌/ 2022年02月02日 17:13/ 0 赞/ 124 阅读
相关 二分查找 int search2( int array\[\], int n, int v) \{ int left, right, middle; 心已赠人/ 2021年12月20日 16:07/ 0 赞/ 123 阅读
相关 二分查找 二分查找 二分查找是一个比较简单的算法,用 C++ 语言实现如下: template <typename T> int binary_search( ゞ 浴缸里的玫瑰/ 2021年12月13日 03:57/ 0 赞/ 185 阅读
相关 二分查找 > 一、自己实现的 include<iostream> include<cstdio> include<algorithm> u 左手的ㄟ右手/ 2021年09月21日 17:12/ 0 赞/ 290 阅读
还没有评论,来说两句吧...