64,199
社区成员
发帖
与我相关
我的任务
分享
【题解】《算法零基础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];
}
}
}

二改之后:
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;
}
}
}

第二题: 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;
}
}
