LeetCode 367 Valid Perfect Square

本文介绍三种高效算法来判断一个整数是否为完全平方数:利用奇数和特性、牛顿迭代法及二分查找法。这三种方法避免了使用内置平方根函数。
Given a positive integer  num , write a function which returns True if  num  is a perfect square else False.

Note: Do not use any built-in library function such as sqrt.

Example 1:

Input: 16
Returns: True

Example 2:

Input: 14
Returns: False
       参考: tstsugeg-[leetcode] 367. Valid Perfect Square
方法一: 一完全平方数可分解为1 + 3 + 5 + 7 + ... 因为 (x + 1) ^ 2 - x ^ 2 = 2 * x + 1。 完全平方数是一系列奇数之和, 例如:

 1 = 1
        4 = 1 + 3
        9 = 1 + 3 + 5
       16 = 1 + 3 + 5 + 7
       25 = 1 + 3 + 5 + 7 + 9
       36 = 1 + 3 + 5 + 7 + 9 + 11
       ....
      1+3+...+(2n-1) = (2n-1 + 1)n/2 = n*n

	public boolean isPerfectSquare2(int num) {
		int k = 1;
		while (num > 0) {
			num = num - k;
			k = k + 2;
		}
		return 0 == num;
	}

方法二:牛顿迭代法,此方法效率最高!
设r是
   
的根,选取
   
作为r的初始近似值,过点
   
做曲线
   
的切线L,L的方程为
   
,求出L与x轴交点的横坐标
   
,称x 1为r的一次近似值。过点
   
做曲线
   
的切线,并求该切线与x轴交点的横坐标
   
,称
   
为r的二次近似值。重复以上过程,得r的近似值序列,其中,
   
称为r的
   
次近似值,上式称为 牛顿迭代公式
用牛顿迭代法解非线性方程,是把非线性方程
   
线性化的一种近似方法。把
   
在点
   
的某邻域内展开成泰勒级数
   
,取其线性部分(即泰勒展开的前两项),并令其等于0,即
   
,以此作为非线性方程
   
的近似方程,若
   
,则其解为
   
, 这样,得到牛顿迭代法的一个迭代关系式:
   
。引自: 百度百科-牛顿迭代法
根据以上迭代公式, 我们不断用f(x)=x^2-num的切线来逼近方程x^2-num=0的根。根号num实际上就是x^2-num=0的一个正实根,这个函数的导数是2x。也就是说,函数上任一点(x,f(x))处的切线斜率是2x。那么,x-f(x)/(2x)就是一个比x更接近的近似值。代入f(x)=x^2-num得到x-(x^2-num)/(2x),也就是(x+num/x)/2。此段引自:matrix67-牛顿迭代法快速寻找平方根
	public boolean isPerfectSquare(int num) {
		long x = num;
		while (x * x > num) {
			x = (x + num / x) / 2;
		}
		return x * x == num;
	}

      方法三:二分查找,效率比方法一好,但是不如牛顿迭代法。
	public boolean isPerfectSquare3(int num) {
		if (num < 0) return false;
		long i = 0;
		long j = num;
		while (i <= j) {
			long m = (i + j) / 2;
			long m2 = m * m;
			if (m2 == num) return true;
			if (m2 < num) i = m + 1;
			else j = m - 1;
		}
		return false;
	}


在车辆工程中,悬架系统的性能评估和优化一直是研究的热点。悬架不仅关乎车辆的乘坐舒适性,还直接影响到车辆的操控性和稳定性。为了深入理解悬架的动态行为,研究人员经常使用“二自由度悬架模型”来简化分析,并运用“传递函数”这一数学工具来描述悬架系统的动态特性。 二自由度悬架模型将复杂的车辆系统简化为两个独立的部分:车轮和车身。这种简化模型能够较准确地模拟出车辆在垂直方向上的运动行为,同时忽略了侧向和纵向的动态影响,这使得工程师能够更加专注于分析与优化与垂直动态相关的性能指标。 传递函数作为控制系统理论中的一种工具,能够描述系统输入和输出之间的关系。在悬架系统中,传递函数特别重要,因为它能够反映出路面不平度如何被悬架系统转化为车内乘员感受到的振动。通过传递函数,我们可以得到一个频率域上的表达式,从中分析出悬架系统的关键动态特性,如系统的振幅衰减特性和共振频率等。 在实际应用中,工程师通过使用MATLAB这类数学软件,建立双质量悬架的数学模型。模型中的参数包括车轮质量、车身质量、弹簧刚度以及阻尼系数等。通过编程求解,工程师可以得到悬架系统的传递函数,并据此绘制出传递函数曲线。这为评估悬架性能提供了一个直观的工具,使工程师能够了解悬架在不同频率激励下的响应情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值