栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【跟着英雄哥学算法第(10)讲】力扣1362.最接近的因子 [c语言]

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【跟着英雄哥学算法第(10)讲】力扣1362.最接近的因子 [c语言]

前言           这是初学算法的我

 

          这是加入万人学习社区的我                  

 

       在此,博主准备分享一个万人学习的社区,这里有许多大佬指引前行,大家互相勉励学习,欢迎大家加入这个社区。博主也是小白,理解大家的困惑,一个人学习太艰难了,不容易走的很远。

        万人千题社区    https://bbs.csdn.net/forums/hero?category=0

  • 前言
  • 最接近的因子
  • 一、分析
  • 二、代码
  • 补充
 
最接近的因子

                 力扣https://leetcode-cn.com/problems/closest-divisors/


 

一、分析

        观察问题性质可知,对任意一个在 [sqrt(n), n]  范围内的因数,一定有一个与其对称的在 [1, sqrt( n)] 范围内的因数。因此,遍历因数只需要遍历 [1, sqrt( n)]  范围即可。
        另外,当 [1, sqrt( n)]  范围内的因数最大时,与其对称的 [sqrt( n), n] 范围内的因数也最小,此时这两个数字之间的差值一定是所有可能性中最小的。因此,我们只需要找到 [1, sqrt (n)] 中的最大因数即可停止。

       例如  36的因子为1,2,3,4,6,9,12,18,36.                    1~sqrt(n)的最大因数为6,对称后发现 sqrt(n)~ n的最小因子为6     
二、代码实现

int* closestDivisors(int num, int* returnSize) {
        int* ret = (int*)malloc(2 * sizeof(int));        // 给ret数组分配了2个字节的内存空间
        int n, i, sub = -1;                                    
        for (n = num + 1; n <= num + 2; ++n) {                  // 
            for (i = 1; i <=sqrt (n); ++i) {
                if (n % i)                                   // 
                    continue;
                if (sub == -1 || abs(n / i - i) < sub) {    //    ||的解释:当前者为假时后者才会进行判断
                    sub = abs(n / i - i);                   
                    ret[0] = n / i;                          //   赋值ret[0] ret[1]
                    ret[1] = i;
                }
            }
        }
        *returnSize = 2;                                    // 初始化数组长度为2
        return ret;                                         //  返回ret数组
    }

补充      malloc函数

        malloc()函数其实就在内存中找一片指定大小的空间,然后将这个空间的首地址范围给一个指针变量,这里的指针变量可以是一个单独的指针,也可以是一个数组的首地址,这要看malloc()函数中参数size的具体内容。      

int* p;

  p = (int *) malloc (sizeof(int));                 //默认一个内存空间

       int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100个整数的内存空间。char *p;     

       p=(char *)malloc(100); 

注意:malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384165.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号