• 力扣(LeetCode)试题69-x的平方根 C++代码


    感想:在力扣练题,真的可以让你思维变得严谨,提交时再一次因为数据溢出翻车。。。

    方法:首先使用的二分法,但是提交时系统的输入为2147395599,取中间值在平方时直接溢出报错。

    经题解提醒,相当了迭代法,具体过程如下:

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 class Solution 
     6 {
     7 public:
     8     int mySqrt(int x) 
     9     {
    10         if (x == 0) return 0;
    11         else
    12         if (x == 1) return 1;
    13         else
    14         {
    15             
    16             int pre = (1/2 + (x / 1)/2);//将初始值设为1,并把结果作为pre,如果pre==1,则收敛于
    17             //注意,不要写成 (1 + (x / 1)) / 2 这个形式,为啥?考虑一下
    18             int cur = 0;
    19             while (true)
    20             {
    21                 if (pre == 1)
    22                     break;
    23                 else
    24                 {
    25                     cur = (pre + (x / pre)) / 2;
    26                     if (cur == pre || cur > pre)//有可能不收敛,会出现cur与pre来回切换,比如x=8时,所以有另一个条件
    27                         break;
    28                     else
    29                         pre = cur;
    30                 }
    31             }
    32             return pre;
    33         }
    34 
    35 
    36         //二分法
    37         /*if (x == 0) return 0;
    38         else
    39         if (x == 1) return 1;
    40         else
    41         {
    42 
    43             int min = 0;
    44             int max = x;
    45             while (true)
    46             {
    47                 int mid = (min + max) / 2;
    48                 if (mid*mid > x)
    49                     max = mid;
    50                 else
    51                     min = mid;
    52 
    53                 if (max - min == 1)
    54                 {
    55                     return min;
    56                     break;
    57                 }
    58             }
    59         }*/
    60     }
    61 };
    62 
    63 int main()
    64 {
    65     int x = 2147483647;
    66     int result;
    67     Solution sol;
    68     result = sol.mySqrt(x);
    69     cout << result << endl;
    70 
    71     int u;
    72     cin >> u;
    73     return 0;
    74 }

     

  • 相关阅读:
    断棍构造过程-波利亚翁方案-中餐馆过程
    狄利克雷过程
    狄利克雷分布
    共轭先验(conjugate prior)
    镜像与文件系统
    Oracle-04
    Oracle-02
    Oracle-01
    认识数据库
    c:forEach的作用
  • 原文地址:https://www.cnblogs.com/pgzhanglin/p/13285380.html
Copyright © 2020-2023  润新知