既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
需要这份系统化资料的朋友,可以戳这里获取
1≤k≤10000
输入样例:
6 3
1 2 2 3 3 4
3
4
5
输出样例:
3 4
5 5
-1 -1
代码如下
#include <iostream> using namespace std; const int N = 1e6 + 10; int a[N]; int main() { int n; int m; scanf("%d %d", &n, &m); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } while (m--) { int x = 0; scanf("%d", &x); int l = 0, r = n - 1; // 左 while (l < r) { int mid = l + r >> 1; if (a[mid] >= x) { r = mid; } else { l = mid + 1; } } if (a[l] != x) { printf("-1 -1\n"); } else { //右 printf("%d ", l); int l = 0, r = n - 1; while (l < r) { int mid = l + r + 1 >> 1; if (a[mid] <= x) { l = mid; } else { r = mid - 1; } } printf("%d\n", l); } } return 0; }
讯享网
二、浮点数二分模板
浮点数二分比整数简单 ,举个例子,求 x 的平方根,就在[0, x]区间(如果是小数就把右区间 +在这里插入代码片 1),当满足mid * mid <= 1e-6 时就认为找到了边界。
而因为浮点数二分没有取整的情况,每次都严格的分为一半,不需要考虑边界问题。
讯享网#include <iostream> using namespace std; int main() { double x; cin >> x; double l = 0, r = x + 1; while(r -l > 1e-8) { double mid = (l + r) / 2; if(mid \* mid >= x) { r = mid; } else { l = mid; } } cout << l << endl; return 0; }
2.1 例题:数的三次方根
题目链接
题目描述

给定一个浮点数 n,求它的三次方根。
输入格式
共一行,包含一个浮点数 n。
输出格式
数据范围
−10000≤n≤10000
输入样例:
1000.00
输出样例:
10.000000
思路分析:
这里主要是注意有负数的情况,那么我们就可以让l = -10000, r = 10000;剩下的就直接套用模板:
代码如下:
#include <iostream> using namespace std; int main() { double x; cin >> x; double l = -10000, r = 10000; while(r - l > 1e-8) { double mid = (l + r) / 2; if(mid \* mid \* mid >= x) { r = mid; }    既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化! 由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新 [需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/) 既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化! 由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新 [需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/)



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/17293.html