元素最左出现练习题

作者: IT_Matters | 来源:发表于2016-07-07 09:54 被阅读52次

对于一个有序数组arr,再给定一个整数num,请在arr中找到num这个数出现的最左边的位置。
给定一个数组arr及它的大小n,同时给定num。请返回所求位置。若该元素在数组中未出现,请返回-1。

测试样例:[1,2,3,3,4],5,3
返回:2

思路

在有序数组中查找元素, 很容易想到二分查找.
一种比较直观的想法是找到其中一个目标元素的位置后,向左开始遍历,直到到达最左边出现的位置.但是最差情况下该方法的时间复杂度是O(n).
这里我们改变二分查找的终止条件,不是找到目标节点就返回,而是逐步缩小查找范围至1.

代码:

public int findPos(int[] arr, int n, int num) {    
        int pos=-1;
        if(n==0)return pos;
        int lo=0,hi=n-1;
        int mid=0;
        
        while(lo<hi){
            mid=lo+(hi-lo)/2; // avoid overflow
            if(arr[mid]==num){
                pos=mid;
                hi=mid;
            }
            else if(arr[mid]>num){ hi=mid-1;}
            else {lo=mid+1;}
        }
        return pos;
    }

相关文章

  • 元素最左出现练习题

    对于一个有序数组arr,再给定一个整数num,请在arr中找到num这个数出现的最左边的位置。给定一个数组arr及...

  • 6_3元素最左出现

    对于一个有序数组arr,再给定一个整数num,请在arr中找到num这个数出现的最左边的位置。 给定一个数组arr...

  • 经典排序算法-选择排序Selection sort

    一、选择排序思想:查找最小(大)的元素与最左端未排好序的元素交换,步骤如下: 1、从左到右查找找到最大(小)的元素...

  • 数据结构学习笔记——第四章:栈

    一、栈 1. 栈的特点   ①只有最右侧(顶部)元素可见,最左侧(底部)元素不可见  ②只提供pop和push两个...

  • 浮动元素与边距合并

    float即为浮动,在CSS中的作用是使元素脱离正常的文档流并使其移动到其父元素的“最左边”或“最右边”。下面解释...

  • IDEA URI Is Not Registered

    IDEA的配置的xml出现Is Not Registere可以选中链接,这样最左侧会出现一个灯泡,选择Fetch ...

  • 快速排序

    快速排序就的思想为,首相选出数组中一个元素(一般为最左边或者最右边的元素),然后从左向右一次比较数组中的元素和选择...

  • 八大排序算法的Python实现__2__选择排序

    个人技术博客地址:http://songmingyao.com/ 原理 默认最左侧的元素为最小,而后依次将右侧的每...

  • vant3.x 进度条上增加跟随提示元素

    f12研究看到数字百分比是0的时候 元素就在最左边,100的时候元素就在最右边,50的时候就在进度刻度线的中间,还...

  • 最左原位

    有一个有序数组arr,其中不含有重复元素,请找到满足arr[i]==i条件的最左的位置。如果所有位置上的数都不满足...

网友评论

    本文标题:元素最左出现练习题

    本文链接:https://www.haomeiwen.com/subject/unfljttx.html