zoukankan      html  css  js  c++  java
  • (Good topic)四因数 (leetcode 181周赛T2)

     四因数难度中等1收藏分享切换为英文关注反馈给你一个整数数组 nums,请你返回该数组中恰有四个因数的这些整数的各因数之和。
    如果数组中不存在满足题意的整数,则返回 0 。
     
    示例:
    输入:nums = [21,4,7]
    输出:32
    解释:
    21 有 4 个因数:1, 3, 7, 21
    4 有 3 个因数:1, 2, 4
    7 有 2 个因数:1, 7
    答案仅为 21 的所有因数的和。

     
    提示:

     1 <= nums.length <= 10^4
     1 <= nums[i] <= 10^5
     
    解题思路
    上午的比赛,一开始做从1遍历到nums[i]一直超时,之后比赛结束后在讨论区有大神给了解答,从遍历到平方根即可改了之后可以通过了
    1.先判断是否为平方数,是平方数则一定不是四因子数,因为如果是平方数则它必有一个单独的因子,所以不可能是四因子数。
    2.然后遍历到平方根,详细看下面注释。
     1 int sumFourDivisors(int* nums, int numsSize)
     2 {
     3     int sumfour = 0;
     4     int incflag = 0;
     5 
     6     for (int i = 0; i < numsSize; i++)
     7     {
     8         int flag = 0;
     9         int cnt = 1;
    10         int sqrroot = sqrt(nums[i]);
    11         int sum = 1 + nums[i];
    12         for (int j = 2; j < sqrt(nums[i]); j++)
    13         {
    14             if (sqrroot * sqrroot == nums[i])  //如果是平方数直接跳出判断下一个数
    15             {
    16                 break;
    17             }
    18 
    19             if (nums[i] % j == 0)
    20             {
    21                 cnt++;
    22                 sum += (j + nums[i]/j);
    23             }
    24 
    25             if (cnt > 2)
    26             {
    27                 break;
    28             }
    29         }
    30         if (cnt != 2)
    31         {
    32             flag = 1;
    33         }
    34 
    35         if (flag == 0)
    36         {
    37             incflag++;
    38             sumfour += sum;
    39         }
    40     }
    41 
    42     if (incflag == 0)
    43         return 0;
    44     else
    45         return sumfour;
    46 }
     
  • 相关阅读:
    mysql 主从服务器配置
    Linux命令
    Kali
    Python进阶
    性能测试工具
    sphinx搜索
    页面静态化
    PHP API接口
    线程的生命周期
    多线程的创建
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12545935.html
Copyright © 2011-2022 走看看