【题解】《算法零基础100讲》(第10讲) 因子分解和枚举(java版)

敲代码的xiaolang
潜力新星
2021-10-30 22:26:11
加精

【题解】《算法零基础100讲》(第10讲) 因子分解和枚举(java版) https://blog.csdn.net/weixin_52605156/article/details/121057200?spm=1001.2014.3001.5502
第一题: https://leetcode-cn.com/problems/the-kth-factor-of-n/

class Solution {
    public int kthFactor(int n, int k) {
        int[] array = new int[1001];
        int i,m,j=0;
        for(i=1; i<=n; i++){
            if(n%i==0){
                array[j] = i;
                j++;
            }
        }
        int maxn;
        maxn = array[0];
        for(m=1; m<j; m++){
            if(array[m] < maxn){
                maxn = array[m];
                array[m] = array[0];
                array[0] = maxn;
            }
        }
        if(j<k){
            return -1;
        }else{
            return array[k-1];
        }
    }
}

img

二改之后:

class Solution {
    public int kthFactor(int n, int k) {
        int i = 0;
        for( ; k>0&&i<=n; ){
            i++;
            if(n % i == 0){
                k--;
            }
        }
        if(i > n){
            return -1;
        }else{
            return i;
        }  
    }
}

img

第二题: https://leetcode-cn.com/problems/closest-divisors/

class Solution {
    public int[] closestDivisors(int num) {
            int[] array = new int[2];
            int[] array1 = new int[2];
            int i,j,a,b,sub1,sub2,temp1 = 1000000000,temp2 = 1000000000;
            int num1,num2;
            num1 = num + 1;
            num2 = num + 2;
            for(i=1; i<num1; i++){
                if(num1%i == 0){
                    a = num1/i;
                    sub1 = Math.abs(a - i);
                    if(sub1 < temp1){
                        temp1 = sub1;
                        array[0] = i;
                        array[1] = a;
                    }
                }
            }

            for(j=1; j<num2; j++){    
                if(num2%j == 0){
                    b = num2/j;
                    sub2 = Math.abs(b - j);
                    if(sub2 < temp2){
                        temp2 = sub2;
                        array1[0] = j;
                        array1[1] = b;
                    }
                }
            }

            if(temp1 < temp2){
                return array;
            }else{
                return array1;
            }
    }
}

//超时了。。。。

二改:

class Solution {
    public int[] closestDivisors(int num) {
        int[] array = new int[2];
        int n,i;
        array[0] = 0;
        array[1] = num;//最大令其为num
        for(n = num + 1; n <= num + 2; ++n){
            for (i = 1; i*i <= n; ++i){
                if(n%i == 0){
                    if (Math.abs(n/i - i) <= Math.abs(array[0] - array[1])){
                        array[0] = i; //注意顺序
                        array[1] = n/i;
                }
            }
        }
    }
        return array;
    }
}

img

...全文
46 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
少年不褪色 2021-10-31
  • 打赏
  • 举报
回复
66
秋名山码神 2021-10-31
  • 打赏
  • 举报
回复
不错哦
  • 打赏
  • 举报
回复

打卡

64,199

社区成员

发帖
与我相关
我的任务
社区描述
学习「 算法 」的捷径就是 「 题海战略 」,社区由「 夜深人静写算法 」作者创建,三年ACM经验,校集训队队长,亚洲区域赛金牌,世界总决赛选手。社区提供系统的训练,答疑解惑,面试经验,大厂内推等机会
社区管理员
  • 英雄哪里出来
  • 芝麻粒儿
  • Amy卜bo皮
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

QQ群:480072171

英雄算法交流 8 群

 

试试用AI创作助手写篇文章吧