首页 > 其他分享 >34. 在排序数组中查找元素的第一个和最后一个位置C

34. 在排序数组中查找元素的第一个和最后一个位置C

时间:2024-02-26 19:11:21浏览次数:25  
标签:numsSize head int mid 34 tail 查找 while 排序

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* searchRange(int* nums, int numsSize, int target, int* returnSize) {
    *returnSize=2;
    int* a=(int*)malloc(sizeof(int)*2);
    a[0]=-1;
    a[1]=-1;
    int head=0,tail=numsSize-1;
    while(head<=tail){
        int mid=(head+tail)/2;
        if(nums[mid]<target){
            head=mid+1;
        }else if(nums[mid]>target){
            tail=mid-1;
        }else{
            head=mid;
            tail=mid;
            while(head> 0 && nums[head-1]==target ) head--;
            while(tail<numsSize-1 && nums[tail+1]==target ) tail++;
            a[0]=head;
            a[1]=tail;
            break;
        }
    }
    return a;
}

标签:numsSize,head,int,mid,34,tail,查找,while,排序
From: https://www.cnblogs.com/llllmz/p/18034986

相关文章

  • AtCoder Beginner Contest 342
    AtCoderBeginnerContest342比赛链接开学了,以后codeforces大概率只能补题了,但是atcoder还是可以做的A-Yay!思路找出只出现一次的字符就可以Code#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoidsolve(){ strings; cin>>s; std::map<ch......
  • 704. 二分查找C
    现在开始刷代码随想录里的题了。intsearch(int*nums,intnumsSize,inttarget){inthead=0,tail=numsSize-1;while(head<=tail){intmid=(head+tail)/2;if(nums[mid]<target){head=mid+1;}elseif(nums[mid]>target){......
  • AtCoder Beginner Contest 342
    D.SquarePair给你一个数组,最多2e5个元素,每个元素的范围是0到2e5问选出两个元素,乘积为完全平方数的情况有多少?(任选a[i]a[j],且满足i<j)一种思路是用map记录数组的元素,选出一个元素x后,枚举所有完全平方数,如果完全平方数可以整除选出的这个元素且整除的结果y在map......
  • Toyota Programming Contest 2024#2(AtCoder Beginner Contest 341)D - Only one of two
    目录链接题面题意题解代码总结链接D-Onlyoneoftwo题面题意求第\(k\)个只能被\(N\)或\(M\)整除的数题解\([1,x]\)中的能被\(n\)整除的数有\(\lfloor\frac{x}{n}\rfloor\)个\([1,x]\)中的能被\(m\)整除的数有\(\lfloor\frac{x}{m}\rfloor\)个\([1,x]\)中的能被\(n\)......
  • 牛客周赛34(A~E)
    A两种情况两个字符相同只有2两个字符不相同4#include<bits/stdc++.h>#defineintlonglong#definerep(i,a,b)for(inti=(a);i<=(b);++i)#definefep(i,a,b)for(inti=(a);i>=(b);--i)#definepiipair<int,int>#definepddpair<double,double......
  • 牛客周赛 Round 34
    牛客周赛Round34小红的字符串生成代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#definesesecondusingi128=__int128_t;usingpiii=pair<ll,pair<ll,ll>>;voidsolve()......
  • Python数据结构与算法05——二分查找
    二分查找——递归版:defbinarySearch(aimlist,item):#获取列表的长度n=len(aimlist)#如果列表非空ifn>0:#计算中间索引mid=n//2#如果中间元素是目标元素,则找到了ifaimlist[mid]==item:......
  • HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342)
    HUAWEIProgrammingContest2024(AtCoderBeginnerContest342)A-Yay!代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#definesesecondusingi128=__int128_t;usingpiii=p......
  • Atcoder Beginner Contest 342 全题解
    A-Yay!题意给定字符串\(s\)已知该字符串中只有一个字符与其他字符不同求这个字符思想开一个数组\(cnt_i\)来记录\(s\)中每个字符出现的次数,一个数组\(first_i\)来记录\(s\)中每个字符第一次出现的下标。选择\(cnt_i=1\)的\(i\)输出\(first_i\)......
  • AtCoder Beginner Contest 342
    A-Yay!(abc342A)题目大意给定一个字符串,两个字符,其中一个只出现一次,找出它的下标。解题思路看第一个字符出现次数,如果是\(1\)则就是它,否则就是不是它的字符。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){io......