【数据结构·考研】在排序数组中寻找目标值

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。 如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 

解题思路:看到排序数组明白是一道明显的二分查找题,当然也可以通过顺序查找实现。

/*
直接查找
*/
int searchInsert_1(int* nums, int numsSize, int target){ //数组nums, nums长度numSize,目标值target 
    for(int i = 0; i < numsSize; i ++)
        if(nums[i] >= target) return i;
    return numsSize;    
}
/*
二分查找
*/ 
int searchInsert_2(int* nums, int numsSize, int target){ //数组nums, nums长度numSize,目标值target
    int low = 0, high = numsSize - 1;
    int mid;
    while(high >= low){
        mid = (high + low) / 2;
        if(nums[mid] == target) return mid;
        else if(target > nums[mid]) low = mid + 1;
        else high = mid - 1;
    }
    return target > nums[mid] ? mid + 1 : mid;
} 

全部代码如下:

#include<iostream>
#include<cstdio>
using namespace std;

//直接查找
int searchInsert_1(int* nums, int numsSize, int target){ //数组nums, nums长度numSize,目标值target 
    for(int i = 0; i < numsSize; i ++)
        if(nums[i] >= target) return i;
    return numsSize;    
}

//二分查找 
int searchInsert_2(int* nums, int numsSize, int target){ //数组nums, nums长度numSize,目标值target
    int low = 0, high = numsSize - 1;
    int mid;
    while(high >= low){
        mid = (high + low) / 2;
        if(nums[mid] == target) return mid;
        else if(target > nums[mid]) low = mid + 1;
        else high = mid - 1;
    }
    return target > nums[mid] ? mid + 1 : mid;
} 

int main(){
	int arr[] = {1, 2, 2, 2, 3, 4, 5, 6, 7, 8};
	printf("原数组:\n"); 
	for(int i = 0; i < 10; i ++) cout<<arr[i]<<" ";
	int k = searchInsert_1(arr, 10, 6);
	cout<<endl;
	cout<<"6插入的位置:"<<k<<endl;
	k = searchInsert_2(arr, 10, 8);
	cout<<"8插入的位置:"<<k<<endl;;
}

代码运行结果:

 更多代码请参考:手撕考研数据结构(代码汇总)

猜你喜欢

转载自blog.csdn.net/cjw838982809/article/details/130991554
今日推荐