刷題三:給定一個排序陣列和目標值,求下標
阿新 • • 發佈:2019-02-14
給定一個排序陣列nums(無重複元素)與目標值target,如果target在nums裡出現,則返回target所在下標,如果target在nums裡未出現,則返回target應該插入位置的陣列下標,使得將target插入陣列nums後,陣列仍有序。
// // main.cpp // binary_serarh_insert_index // // Created by tong on 2018/6/12. // Copyright © 2018年 tong. All rights reserved. // #include <iostream> #include <vector> #include <stdio.h> using namespace std; int solution(vector<int> &nums,int target) { int index = -1; int begin = 0; int end = nums.size() - 1; while(index == -1) { int mid = (begin + end) / 2; if(nums[mid] == target) index = mid; else if(nums[mid] < target) { if (mid == nums.size() -1 || nums[mid+1] > target )// 邊界判斷條件,如果要插入的位置超過了元素自身的長度 index = mid + 1; else begin = mid + 1; } else if(nums[mid] > target) { if (mid == 0 || target > nums[mid-1])//判斷如果要插入的位置在第一個元素的位置 index = mid; else end = mid - 1; } } return index; } int main(int argc, const char * argv[]) { vector<int> nums = {2,3,4,5,6,7,8,9,19}; cout<<solution(nums, 33)<<endl; return 0; }