算法进修Day-35

算法进修Day-35

69. x的平方根

难度:简单

题目要求:

给你一个非负整数 x ,计算并返回 x算术平方根

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

**注意:**不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5

示例1

输入:x = 4

输出:2

示例2

输入:x = 8

输出:2

题解

使用二分查找,定义 h i g h = x high=x high=x 和 l o w = 1 low=1 low=1 来表示上下边界,进行如下操作

  • 如果 x = 0 x=0 x=0,那么直接返回0
  • 如果 l o w < h i g h low<high low<high,那么定义 m i d = l o w + ( h i g h − l o w + 1 ) / 2 mid=low+(high-low+1)/2 mid=low+(high−low+1)/2,如果 ( m i d ∗ m i d ) ≤ x (mid*mid)\leq x (mid∗mid)≤x 那么让 l o w = m i d low=mid low=mid,否则 h i g h = m i d − 1 high=mid-1 high=mid−1

遍历结束之后直接返回 l o w low low

想法代码

Csharp 复制代码
class Solution
{
    public static void Main(String[] args)
    {
        Solution solution = new Solution();
        int x = 36;
        int res = solution.MySqrt(x);
        Console.WriteLine(res);
    }

    public int MySqrt(int x)
    {
        int low = 1;
        int high = x;
        if (x == 0)
        {
            return 0;
        }
        while (low < high)
        {
            int mid = low + (high - low + 1) / 2;
            if ((long)mid * mid <= x)
            {
                low = mid;
            }
            else
            {
                high = mid - 1;
            }
        }
        return low;
    }
}

70. 爬楼梯

难度:简单

题目要求:

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例1

输入:n = 2

输出:2

示例2

输入:n = 3

输出:3

题解

使用回溯法,使用数组 a r r a y array array 来存储总计的内容,定义 a r r a y [ 0 ] = 1 , a r r a y [ 1 ] = 1 array[0]=1,array[1]=1 array[0]=1,array[1]=1

回溯法方法如下:

  • 如果数组的第n个元素不是0,那么,直接返回第n个元素
  • 根据第1,2,3,4层方法得出的结果来看,结果为斐波那契数列,所以第n层方法为 ( n + 1 ) + ( n + 2 ) (n+1)+(n+2) (n+1)+(n+2)
  • 定义 x x x 为回溯方法的第 n − 1 n-1 n−1 层
  • 定义 y y y 为回溯方法的第 n − 2 n-2 n−2 层
    最后 a r r a y [ n ] = x + y array[n]=x+y array[n]=x+y 并返回

想法代码

Csharp 复制代码
class Solution
{
    public static void Main(String[] args)
    {
        Solution solution = new Solution();
        int n = 3;
        int res = solution.ClimbStairs(n);
        Console.WriteLine(res);
    }

    public int ClimbStairs(int n)
    {
        int[] array = new int[n + 1];
        array[0] = 1;
        array[1] = 1;
        return ChangeArray(n,array);
    }

    public int ChangeArray(int n, int[] array)
    {
        if (array[n] != 0)
        {
            return array[n];
        }
        int x = ChangeArray(n-1, array);
        int y = ChangeArray(n-2, array);
        array[n] = x + y;
        return array[n];
    }
}
相关推荐
CoovallyAIHub13 小时前
Moonshine:比 Whisper 快 100 倍的端侧语音识别神器,Star 6.6K!
深度学习·算法·计算机视觉
CoovallyAIHub14 小时前
速度暴涨10倍、成本暴降6倍!Mercury 2用扩散取代自回归,重新定义LLM推理速度
深度学习·算法·计算机视觉
CoovallyAIHub14 小时前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github
CoovallyAIHub15 小时前
开源:YOLO最强对手?D-FINE目标检测与实例分割框架深度解析
人工智能·算法·github
CoovallyAIHub15 小时前
OpenClaw:从“19万星标”到“行业封杀”,这只“赛博龙虾”究竟触动了谁的神经?
算法·架构·github
刀法如飞15 小时前
程序员必须知道的核心算法思想
算法·编程开发·算法思想
徐小夕17 小时前
pxcharts Ultra V2.3更新:多维表一键导出 PDF,渲染兼容性拉满!
vue.js·算法·github
CoovallyAIHub17 小时前
OpenClaw一脚踩碎传统CV?机器终于不再只是看世界
深度学习·算法·计算机视觉
CoovallyAIHub18 小时前
仅凭单目相机实现3D锥桶定位?UNet-RKNet破解自动驾驶锥桶检测难题
深度学习·算法·计算机视觉