Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 提高在数组中返回重复数字的效率_Java_Arrays_Algorithm_Performance - Fatal编程技术网

Java 提高在数组中返回重复数字的效率

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

我正在努力提高代码的效率

其目的是简单地获取输出的副本,在本例中,我选择了要计数的#1,因此,例如给定N=3,11^3=1331,将返回2,因为我们可以在输出中计数两个1

自然地,当处理较大的功率(其中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();


对于这样的问题,您将得到更多/更好的回答:谢谢@sleepToken
Math.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++;
        }
    }