当前位置:首页 > 编程笔记 > 正文
已解决

入门 对有序数组进行二分搜索 + 图解 (上篇)

来自网友在路上 174874提问 提问时间:2023-11-09 06:52:51阅读次数: 74

最佳答案 问答题库748位专家为你答疑解惑

1)有序数组中确定 num 存在 还是 不存在

bool exist(int num,int arr[],int len) {if (len == 0) return false;int left = 0, right = len - 1, mid = 0;while (left <= right) {mid = left + ((right - left) >> 2);if (arr[mid] == num) return true;else if (arr[mid] > num) right = mid - 1;else left = mid + 1;}return false;
}

2)有序数组中找 >=num最左位置

// 2)在有序数组中找 >= num的最左位置
int findLeft(int num,int arr[], int len) {int left = 0, right = len - 1, mid = 0;int ans = -1;while (left <= right) {mid = left + ((right - left) >> 1);if (arr[mid] >= num) {ans = mid;right = mid - 1;}else {left = mid + 1;}}return ans;
}

3)有序数组中找 <=num 最右位置

// 3)在有序数组中找<=num的最右位置
int findRight(int num, int arr[], int len) {int left = 0, right = len - 1, mid = 0;int ans = -1;while (left <= right) {mid = left + ((right - left) >> 1);if (arr[mid] <= num) {ans = mid;left = mid + 1;}else {right = mid - 1;}}return ans;
}

二分搜索时间复杂度O(logn) 

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"入门 对有序数组进行二分搜索 + 图解 (上篇)":http://eshow365.cn/6-35968-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!