当前位置:   article > 正文

循环队列查找问题_循环队列查找bool displist

循环队列查找bool displist

四五月份找实习的时候,在去哪儿的现场笔试题上有一道循环有序的查找问题,当时用了最简单粗暴的方法解决这个问题,就是for循环解决的,当时也算运气好,没想实现的效率,只是纯粹的想实现这个功能,还好有面试的机会,但在面试的时候这个问题还是被问到了,当时没准备好,没回答出来,接连几个问题都没回答出来,最终挂掉了.现在来总结一番.


这个是java的解决方法.之后再附上python的方法,感觉上更加简洁,供大家参考吧

  1. package com.pingan.mhc.bishiti;
  2. /**
  3. *
  4. * @author MENGHUCHENG012
  5. *
  6. */
  7. public class ChangeBinary {
  8. public static int CycleBinary(int[] array,int key){
  9. int left = 0;
  10. int right = array.length-1;
  11. while(left <= right){
  12. int mid = left +(right-left)/2;
  13. if(array[mid]==key){
  14. return mid;
  15. }
  16. if(array[left]<array[mid]){
  17. if(array[left]<key&&key<array[mid]){
  18. right = mid - 1;
  19. }else{
  20. left = mid + 1;
  21. }
  22. }else{
  23. if(array[left]>key && key>array[mid]){
  24. left = mid + 1;
  25. }else{
  26. right = mid - 1;
  27. }
  28. }
  29. }
  30. return -1;
  31. }
  32. public static void main(String[] args) {
  33. int[] a = new int[]{23,28,19,27};
  34. int num = CycleBinary(a,27);
  35. if(num != -1){
  36. System.out.println("已经找到了,位置在"+num);
  37. }else{
  38. System.out.println("没有找到该值");
  39. }
  40. }
  41. }
python版本的

  1. #encoding:utf-8
  2. #python版本的
  3. def CycleBinary(array,key):
  4. left = 0
  5. right = len(array)-1
  6. while left<=right:
  7. #下面这句写在循环里面
  8. mid = left+(right-left)/2
  9. if key == array[mid]:
  10. print "找到"
  11. return mid
  12. if array[left]<=array[mid]:#从小到大排序,说明边界在右边
  13. if array[left]<=key and key<=array[mid]:
  14. right = mid - 1
  15. else:
  16. left = mid + 1
  17. else:
  18. if array[left]>=key and key>=array[mid]:#边界在左半边,右边有序
  19. left = mid + 1
  20. else:
  21. right = mid - 1
  22. print "找不到"
  23. return -1
  24. data = (11,31,87,99,2,5,7,8)
  25. CycleBinary(data,2)


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

闽ICP备14008679号