判断一个整数数组,判断其中是否有三个数和为0 求简单的算法或思路
package 数组3个数为0;
public class Test {
public static void main(String[] args) {
int [] a={-5,2,1,14,6,-3};
int x=-1;
for(int i=0;i<a.length;i++){
int q=a[i];
x=i;
x++;
System.out.println("q="+q);
for(int j=x;j<a.length;j++){
System.out.println("第二层"+a[j]);
int w=q+a[j];
System.out.println("w="+w);
x++;
for(int k=x;k<a.length;k++){
System.out.println("第三层"+a[k]);
int e=w+a[k];
System.out.println("e="+e);
if(e==0){
System.out.println("成功"+e);
System.exit(0);
}
}
}
}
}
}
自己写的太复杂了。。
[解决办法]
随便写了个,看看有哪不对?
public class TestMain {
public static void main(String[] args) {
int[] arr = { -5, 2, 1, 14, 6, -3 };
int sum= 0; //要求的和
calculate(sum,arr);
}
public static void calculate(int sum,int[] arr) {
int count = 0;
for (int i = 0; i <arr.length; i++) {
for (int j = i+1; j <arr.length; j++) {
for (int k = j+1; k <arr.length; k++) {
if (arr[i] + arr[j] + arr[k] == sum) {
count++;
System.out.println("第"+count+"组:"+arr[i]+"+"+arr[j]+"+"+arr[k]+"="+sum);
}
}
}
}
}
}
[解决办法]
/***
* the times target occur in <code>int[] ints</code>
*
* @param ints
* @param target
* @return
*/
public static int count(int[] ints, int target) {
int count = 0;
for (int i = 0; i < ints.length; i++) {
if (ints[i] == target) {
count++;
}
}
return count;
}
[解决办法]
不见得简单的方法,不过如果你把题目改成30个数相加是否有0,也只需要把MAX_LEVEL改成30就行了。至于效率嘛。。。
private static int MAX_LEVEL = 3;
public void main (String [] args) {
int[] arr = {2,4,5,0,-4,-2};
check (arr, -1, 1, 0);
}
void check (int[] arr, int index, int level, int sum) {
if (level > MAX_LEVEL) return;
for (int i = index + 1; i < arr.length; i++) {
if (level == MAX_LEVEL) {
if (sum + arr[i] == 0) {
System.out.println("oh yeah!");
exit(0);
}
}
else {
check (arr, i, level + 1, sum + arr[i]);
}
}
}
[解决办法]
// 借用了2L的代码,按上面的思路小小的修改了下
// main里面加个Arrays.sort(a); 然后忽略了排序后有重复数据的情况。
public static void calculate(int sum,int[] arr) {
int count = 0;
for (int i = 0; i <arr.length; i++) {
if(arr[i]>=0) break;
for (int j = i+1; j <arr.length; j++) {
if(arr[i]+arr[j]>=0){
break;
}
for (int k = j+1; k <arr.length; k++) {
if (arr[i] + arr[j] + arr[k] == sum) {
count++;
System.out.println("第"+count+"组:"+arr[i]+"+"+arr[j]+"+"+arr[k]+"="+sum);
break;
}
}
}
}
}
[解决办法]
应该需要排序,而且这个应该有很多优化的空间。
不过可能会很复杂。我想到了那个可怕的kmp算法。