当前位置:   article > 正文

华为od算法题-小明找位置-Java解法

华为od算法题-小明找位置-Java解法

华为od算法题-小明找位置-Java解法

题目

小明友出操,按学号从小到大排成一列;小明来迟了,请你给小明出个主意,让他尽快找到他应该排的位置。 算法复杂度要求不高于nLog(n);学号为堅数类型,队列规模<=10000; 输入描述: 1、第一行:输入已排成队列的小朋友的学号(正整数),以”,”1隔开; 例如:93 95 97 100 102 123 155 2、第二行:小明学号,如110; 输出描述: 输出一个数字,代表队列位置(从1开始)。 例如: 6 示例1 输入 93 95 97 100 102 123 155 110 输出 6

思路

遍历数组,用二分查找得到小明应该插入的下标

解题方法

二分查找

复杂度

时间复杂度 O(log(n))

空间复杂度 O(1)

代码

  1. public static int getLocation(String[] nums, int id){
  2. int loc = 0;
  3. int left = 0, right = nums.length-1;
  4. while(left <= right){
  5. int mid = left + (right - left)/2;
  6. if(Integer.valueOf(nums[mid])> id){
  7. right = mid -1;
  8. } else if(Integer.valueOf(nums[mid]) < id){
  9. left = mid + 1;
  10. } else {
  11. return mid+1;
  12. }
  13. }
  14. return left+1;
  15. }
  16. public static void main(String[] args) {
  17. Scanner sc = new Scanner(System.in);
  18. String s = sc.nextLine();
  19. String[] nums = s.split(" ");
  20. int id = sc.nextInt();
  21. sc.close();
  22. System.out.println(getLocation(nums, id));
  23. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/762433
推荐阅读
相关标签
  

闽ICP备14008679号