Камрады, подскажите, что еще можно оптимизировать. Абсолютно не укладываюсь по времени.
package com.javarush.task.task20.task2025;
import java.util.ArrayList;
import java.util.Arrays;
/*
Алгоритмы-числа
*/
public class Solution {
public static boolean isListsEquals (int[] list1, int[] list2) {
int counter = 0;
if (list1.length == list2.length) {
Arrays.sort(list1);
Arrays.sort(list2);
for (int i = 0; i < list1.length; i++) {
if (!(list1[i] == list2[i])){counter++;}
}
}else {return false;}
return counter == 0;
}
public static boolean isUniqNumber (long number) {
int[] ints = getListOfNumbers(number);
int counter = 0;
for (int i = ints.length-1; i > 0; i --) {
if (ints[i] < ints[i-1]) {counter++;}
}
return counter == 0;
}
public static int[] getListOfNumbers(long N) {
ArrayList<Integer> list = new ArrayList<>();
while (true) {
if (N <=9) {list.add((int) N); break;}
else {list.add((int) (N%10)); N = N/10;}
}
int [] longs = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
longs[i] = list.get(i);
}
return longs;
}
public static long[] getNumbers (long maxLongValue) {
int[] armstrongsTEMPlist;
ArrayList<Long> armstrongslist = new ArrayList<>();
for (long l = 1; l < maxLongValue - 1; l++) {
if (isUniqNumber(l)) {
armstrongsTEMPlist = getListOfNumbers(l);
long tmpnumber = 0;
for (int i = 0; i < armstrongsTEMPlist.length; i++) {
//tmpnumber += Math.pow(armstrongsTEMPlist[i], armstrongsTEMPlist.length);
long tmp = armstrongsTEMPlist[i];
for (int j = 1; j < armstrongsTEMPlist.length; j++) {
tmp *= armstrongsTEMPlist[i];
}
tmpnumber += tmp;
}
int[] powlist = getListOfNumbers(tmpnumber);
int[] ourlist = getListOfNumbers(l);
if (isListsEquals(powlist, ourlist)) {
armstrongslist.add(tmpnumber);
}
}
}
long[] numbers = new long[armstrongslist.size()];
for (int i = 0; i < armstrongslist.size(); i++) {
numbers[i] = armstrongslist.get(i);
}
return numbers;
}
public static void main(String[] args) {
System.out.println(Arrays.toString(getNumbers(Integer.MAX_VALUE)));
}
}