题解 | 元素查找

元素查找

https://www.nowcoder.com/practice/72ff6503455c4a008675e79247ef2a3a

#include <algorithm>
#include <vector>
class Finder {
  public:
    int findElement(vector<int> A, int n, int x) {
        // write code here
        int pos = 0;
        for (int i = 0; i < n - 1; ++i) {
            if (A[i] > A[i + 1]) {
                pos = i + 1;
                break;
            }
        }
        int start = pos;
        int end = n - 1;

        while (start <= end) {
            int mid = (start + end) / 2;
            if (A[mid] == x) return mid;
            if (A[mid] > x ) end = mid - 1;
            if (A[mid] < x) start = mid + 1;
        }
        start = 0;
        end = pos - 1;
        while (start <= end) {
            int mid = (start + end) / 2;
            if (A[mid] == x) return mid;
            if (A[mid] > x ) end = mid - 1;
            if (A[mid] < x) start = mid + 1;
        }


        return -1;

    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务