Java 提高在数组中返回重复数字的效率
我正在努力提高代码的效率 其目的是简单地获取输出的副本,在本例中,我选择了要计数的#1,因此,例如给定N=3,11^3=1331,将返回2,因为我们可以在输出中计数两个1 自然地,当处理较大的功率(其中N是一个较大的数字)时,这会大大降低效率 我成功地生成了一个快速但低效的粗略解决方案,这似乎是可行的,但是我能做些什么来提高代码及其效率呢Java 提高在数组中返回重复数字的效率,java,arrays,algorithm,performance,Java,Arrays,Algorithm,Performance,我正在努力提高代码的效率 其目的是简单地获取输出的副本,在本例中,我选择了要计数的#1,因此,例如给定N=3,11^3=1331,将返回2,因为我们可以在输出中计数两个1 自然地,当处理较大的功率(其中N是一个较大的数字)时,这会大大降低效率 我成功地生成了一个快速但低效的粗略解决方案,这似乎是可行的,但是我能做些什么来提高代码及其效率呢 import java.util.ArrayList; public class Solution { private static int n
import java.util.ArrayList;
public class Solution {
private static int num = 11;
public static int solution(int n) {
int counter = 0;
String compare = "1";
double answer = Math.round(Math.pow(num, n));
System.out.println(answer);
String s = String.valueOf(answer);
String[] parts = s.split("");
for (int i=0; i<parts.length; i++){
if (parts[i].equals(compare)){
counter++;
}
}
System.out.println(counter);
return counter;
}
public static void main(String[] args) {
solution(8);
solution(3);
}
}
import java.util.ArrayList;
公共类解决方案{
私有静态int num=11;
公共静态int解决方案(int n){
int计数器=0;
字符串比较=“1”;
双答案=Math.round(Math.pow(num,n));
System.out.println(应答);
字符串s=字符串.valueOf(答案);
字符串[]部分=s.split(“”);
对于(int i=0;iSplit和regex)而言,速度较慢(replaceAll),但replaceAll较短:
counter = s.replaceAll("[^" + compare + "]", "").length();
或
对于这样的问题,您将得到更多/更好的回答:谢谢@sleepTokenMath.pow(num,n)
对于较大的n值不需要花费更多的时间。您可以使用tocharray
而不是split
并比较char而不是String,这会更好。总之,在这两种情况下都没有什么好处,因为您很快就会耗尽十进制精度,然后再花时间进行此类计算。
char[] parts = s.toCharArray();
for (int i = 0; i < parts.length; i++) {
if (parts[i] == '1') {
counter++;
}
}
for (char ch : parts) {
if (parts[i] == '1') {
counter++;
}
}