二分相关知识点
大佬推荐
大佬讲解什么是二分
寻找指定的元素 一
/二分查找
//用普通的遍历暴力也是可以
//二分的方法
#include<iostream>
const int N = 10000;
int n, a[N], k;//全局变量就是香,你懂的
int find()
{
int l = 0, r = n - 1;
while (l <= r)//这是条件嘛
{
int mid = (l + r) >> 1;
if (a[mid] == k)
{
return mid;
}
else if (a[mid] < k)
{
l = mid + 1;
}
else if (a[mid] > k)
{
r = mid - 1;
}
}
return -1;
}
int main()
{
scanf_s("%d%d", &n, &k);
for (int i = 0; i < n; i++)
{
scanf_s("%d", &a[i]);
}
printf("%d", find());
return 0;
}
寻找指定的元素二
![在这里插入图片描述](https://img-blog.csdnimg.cn/0847288cf870499792a1f4aa9a81741f.png)
我认为在这里输出的下标r,l都是可以的
#include<iostream>
const int N = 10000;
int n, a[N], k;
int find()
{
int l = 0, r = n;
while (l < r)
{
int mid = (l + r) >> 1;
if (a[mid] >= k)
{
r = mid;
}
else
l = mid + 1;
}
return l;
}
int main()
{
scanf_s("%d%d", &n, &k);
for (int i = 0; i < n; i++)
{
scanf_s("%d", &a[i]);
}
printf("%d", find());
return 0;
}
寻找指定的元素三
#include <cstdio>
const int MAXN = 100000;
int n, a[MAXN], target;
int binarySearch() {
int l = 0, r = n;
while (l < r) {
int mid = l + (r - l) / 2;
if (a[mid] > target) {
r = mid;
} else {
l = mid + 1;
}
}
return l;
}
int main() {
scanf("%d%d", &n, &target);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
printf("%d", binarySearch());
return 0;
}
查找指定的元素四
思路上基本相同
但是输出l定点的时候加上了一些条件
if (l < n && a[l] == target) {
return l;
}
else {
return -1;
}
整体的代码是
#include <cstdio>
const int MAXN = 100000;
int n, a[MAXN], target;
int binarySearch() {
int l = 0, r = n;
while (l < r) {
int mid = l + (r - l) / 2;
if (a[mid] >= target) {
r = mid;
}
else {
l = mid + 1;
}
}
if (l < n && a[l] == target) {
return l;
}
else {
return -1;
}
}
int main() {
scanf("%d%d", &n, &target);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
printf("%d", binarySearch());
return 0;
}
查找指定的元素五
#include <cstdio>
const int MAXN = 100000;
int n, a[MAXN], target;
int binarySearch() {
int l = 0, r = n;
while (l < r) {
int mid = l + (r - l) / 2;
if (a[mid] > target) {
r = mid;
} else {
l = mid + 1;
}
}
if (l > 0 && a[l - 1] == target) {
return l - 1;
} else {
return -1;
}
}
int main() {
scanf("%d%d", &n, &target);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
printf("%d", binarySearch());
return 0;
}