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;
    }
  • 相关阅读:
    awk中NF的使用
    mysql5.7 column cannot be null
    mysqldump的简单使用
    mysql 删表引出的问题
    centos6.6 下安装mysql5.7
    从高的角度看自动化测试
    java提示找不到或无法加载主类
    修改chrome插件
    jenkins修改时区
    Rest-assured 写日志到 log4j
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/12636287.html
Copyright © 2011-2022 走看看