zoukankan      html  css  js  c++  java
  • 在排序数组中查找元素

    /*
    34.在排序数组中查找元素的第一个和最后一个位置。
    给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
    
    你的算法时间复杂度必须是 O(log n) 级别。
    
    如果数组中不存在目标值,返回 [-1, -1]。
    
    */
    #include<stdio.h>
    #include<malloc.h>
    #include<string.h>
    #include<stdlib.h>
    #include<math.h>
    #include<string.h>
    #include <iostream>
    /*寻找左侧边界*/
    int left_bound(int* nums, int numsSize,int target) {
        int left=0,right=numsSize-1,mid;
        while(left<=right){
            mid=left+(right-left)/2;
            if(nums[mid]==target){
                //别返回,收缩边界
                right=mid-1;
            }else if(nums[mid]<=target){
                left=mid+1;
            }else{
                right=mid-1;
            }
    
        }
        if(left>=numsSize||nums[left]!=target)
            return -1;
        return left;
    }
    /*寻找右侧边界*/
    int right_bound(int* nums, int numsSize, int target) {
        int left=0,right=numsSize-1,mid;
        while(left<=right){
            mid=left+(right-left)/2;
            if(nums[mid]==target){
                //别返回,收缩边界
                left=mid+1;
            }else if(nums[mid]<=target){
                left=mid+1;
            }else{
                right=mid-1;
            }
        }
        if(right<0||nums[right]!=target)
            return -1;
        return left-1;
    }
    int* searchRange(int* nums, int numsSize, int target, int* returnSize){
        int *rs,left,right;
        rs=(int*)malloc(sizeof(int)*2);
        rs[0]=-1;
        rs[1]=-1;
        *returnSize=2;
    
        left = left_bound(nums,numsSize,target);
        right = right_bound(nums,numsSize,target);
    
        rs[0]=left;
        rs[1]=right;
    
        return rs;
    }
    
    
    int main()
    {
        int nums[]={5,7,7,8,8,10},target=8;
        int *returnSize=(int*)malloc(sizeof(int));
        int *rs=searchRange(nums,6,target,returnSize);
        int k=*returnSize,i;
        for(i=0;i<k;i++){
            printf("%d ",rs[i]);
        }
        return 0;
    }
  • 相关阅读:
    python学习之函数的参数
    python学习之文件修改及函数基础作业
    日志模块与 re 模块
    day23
    常用模块(二)
    day 22
    python 常用模块
    软件开发目录规范
    day 20
    python 的模块与包
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/12636287.html
Copyright © 2011-2022 走看看