算法刷题之二分查找
杰明学编程
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 11. 旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。题解思路:遇到排序数组首选二分查找,基于分治的思想。方法:二分查找1.将数组中最左边left和最右边分别和数组中间位置mid进行比较。先看看left,数组nums1[1,2,3,4,5]和数组nums2[3,4,5,1,2],中间元素的值都比最左边的大,但是数组中最小的值原创 2020-08-17 17:20:34 · 96 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。题解思路:方法一:数组排序法1…数组已经是排序,遍历数组的元素,元素值不等于下标值,则数组中缺失的数字就是它。函数代码:class Solution {public: int missingNumber(vector<int>& nums) { //如果数组没有排序,就排序数组,,原创 2020-08-16 08:41:57 · 132 阅读 · 0 评论 -
268 II 缺失的数字(1到n)
题目:在长度为n-1的整形数组中找1到n中缺失的数字,数字的范围1到n,找其中一个缺失的数字这个题和剑指53,力扣268 ,448 相似案例:输入:a[]={1,2,3,5};输出:4题解思路:方法:数学求和作差法1.求出1+2+3+…+n的和sum2.用总数和sum减去数组中所有元素的值,剩下的sum就是缺失的数字。函数代码:class Solution {public: int missingNumber(vector<int>& nums) {原创 2020-08-16 00:39:40 · 463 阅读 · 0 评论 -
50. Pow(x, n)
题目:实现 pow(x, n) ,即计算 x 的 n 次幂函数。题解思路:方法一:快速幂递归求解思路函数代码:class Solution {public: double pow(double x,long N) { double res=1.0; while(N>0) { if(N%2==1) { res=res*x;原创 2020-08-13 18:35:53 · 1319 阅读 · 0 评论 -
29. 两数相除
题目:给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2题解思路:方法:二分查找+递归假设a=10,b=3;(a/b)1.判断边界条件,如果a为0,返回0;如果b为1,返回a,如果b为-1,怕判断a,如果a>原创 2020-08-13 17:02:35 · 133 阅读 · 0 评论 -
69. x 的平方根
题目:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。题解思路:方法一:指数函数计算法(x=e^lnx)指数函数计算方法是用指数函数exp和对数函数log对一个数x的平方根进行计算。注意: 由于计算机无法存储浮点数的精确值,而指数函数和对数函数的参数和返回值均为浮点数,因此运算过程中会存在误差。因此在得到结果的整数部分 res后,我们应当判断 res和res+1中哪一个是真正的答案。函原创 2020-08-13 16:10:05 · 159 阅读 · 0 评论