题目链接
    image.png
    区间寻找某一个数字使用二分法

    1. class Solution {
    2. // 1.我的暴力算法,54ms,5.03%
    3. public int mySqrt1(int x) {
    4. for(int i = 1; i < x; i++) {
    5. if(i > x/i) {
    6. return i-1;
    7. }
    8. }
    9. return x==0?0:1;
    10. }
    11. // 2.我的二分查找,1ms,94.76%
    12. public int mySqrt2(int x) {
    13. if(x == 0) return 0;
    14. int left = 1, right = x;
    15. while(left < right) {
    16. int mid = (right - left)/2 + left;
    17. // System.out.println(mid);
    18. if(mid <= x/mid && (mid+1) > x/(mid+1)) {
    19. return mid;
    20. } else if(mid < x/mid){
    21. left = mid+1;
    22. } else {
    23. right = mid-1;
    24. }
    25. }
    26. return left;
    27. }
    28. // 3.老师的二分查找,1ms,94.76%
    29. public int mySqrt(int x) {
    30. if(x == 0) return 0;
    31. int index = -1, left = 1, right = x;
    32. while(left <= right) {
    33. int mid = (right - left)/2 + left;
    34. if(mid <= x/mid) {
    35. index = mid;
    36. left = mid + 1;
    37. } else {
    38. right = mid - 1;
    39. }
    40. }
    41. return index;
    42. }
    43. }