私はいつもO(n^2)
(ブルートフォース)の解決策を考え出しますが、最初の数分で、あるいは問題を読んだ後に、O(nlogn)
またはO(n)
には決して行きません。大きなデータセットの場合、O(n^2)
は常に失敗します。最適な解決策を得るための問題の考え方へのアプローチ。これについてのいくつかの考えを分かち合うことができますか?ここで私が働いている1つの問題は、大きなデータセット(完全な説明here)のタイムアウトになります。最初のショットでO(nlogn)ソリューションを考える方法は?
コード: - 私は
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
static int pairs(int[] a,int k) {
if(a.length==0 || a==null)
return 0;
int counter=0;
for(int i=0;i<a.length;i++){
for(int j=i+1;j<a.length;j++) {
if(Math.abs(a[i]-a[j])==k)
counter++;
}
}
return counter;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int res;
String n = in.nextLine();
String[] n_split = n.split(" ");
int _a_size = Integer.parseInt(n_split[0]);
int _k = Integer.parseInt(n_split[1]);
int[] _a = new int[_a_size];
int _a_item;
String next = in.nextLine();
String[] next_split = next.split(" ");
for(int _a_i = 0; _a_i < _a_size; _a_i++) {
_a_item = Integer.parseInt(next_split[_a_i]);
_a[_a_i] = _a_item;
}
res = pairs(_a,_k);
System.out.println(res);
}
}
これはあいまいな質問です。すべての問題は異なりますし、ある種の問題を最適に解決するために知っておくと便利なテクニックがあるとしても、奇跡はありません。あなたが天才でない限り、アルゴリズムの最適化は難しいかもしれません。問題への巧妙な答えを見つけるのに、数分以上考える必要があります。 – Dici
また、あなたの特定の問題について助けが必要な場合は、その説明に。それは人々が実際に答えることができるより良い、より焦点を絞った質問になるでしょう – Dici
私はこの問題(コード)で私を助けてくれましたか... – Teja