java 从数组取出指定数量的值，相加大于等于或小于等于指定的值，取出对应的组合下标，下标不能重复

Integer[] datas = new Integer[]{1,2,3,4,5,6,7,8,9,10,11}；//目标数组
Integer min = 6;//大于等于的值
Integer max = 12;//小于等于的值
Integer count = 3;//指定数量

``````public static void main(String[] args) {
Integer[] datas = new Integer[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
Integer min = 6;
Integer max = 12;
Integer count = 3;
List<Integer[]> test = test(datas, min, max, count);
for(Integer[] integers : test){
for(Integer t : integers){
System.out.print("["+t+"]");
}
System.out.println("");
}

}
public static List<Integer[]> test(Integer[] datas, Integer min, Integer max, Integer count){
List<Integer[]> result = new ArrayList<>();
switch (count){
case 1:
break;
case 2:
break;
case 3:
break;
}
return result;
}

public static List<Integer[]> one(Integer[] datas, Integer min, Integer max){
List<Integer[]> result = new ArrayList<>();
for(int i = 0,len = datas.length; i < len; i++){
if(datas[i] >= min && datas[i] <= max){
}
}
return result;
}

public static List<Integer[]> two(Integer[] datas, Integer min, Integer max){
List<Integer[]> result = new ArrayList<>();
for(int i = 0,len = datas.length; i < len; i++){
for(int j = 1 + i; j < len; j++){
Integer num = datas[i] + datas[j];
if(num >= min && num <= max){
}
}
}
return result;
}

public static List<Integer[]> three(Integer datas[], Integer min, Integer max){
List<Integer[]> result = new ArrayList<>();
for(int i = 0,len = datas.length; i < len; i++){
for(int j = 1 + i; j < len; j++){
for(int k = 1 + j; k < len; k++){
Integer num = datas[i] + datas[j] + datas[k];
if(num >= min && num <= max){
}
}
}
}
return result;
}
``````

``````[5]
[6]
[7]
[8]
[9]
[10]
[11]
[0][4]
[0][5]
[0][6]
[0][7]
[0][8]
[0][9]
[0][10]
[1][3]
[1][4]
[1][5]
[1][6]
[1][7]
[1][8]
[1][9]
[2][3]
[2][4]
[2][5]
[2][6]
[2][7]
[2][8]
[3][4]
[3][5]
[3][6]
[3][7]
[4][5]
[4][6]
[0][1][2]
[0][1][3]
[0][1][4]
[0][1][5]
[0][1][6]
[0][1][7]
[0][1][8]
[0][2][3]
[0][2][4]
[0][2][5]
[0][2][6]
[0][2][7]
[0][3][4]
[0][3][5]
[0][3][6]
[0][4][5]
[1][2][3]
[1][2][4]
[1][2][5]
[1][2][6]
[1][3][4]
[1][3][5]
[2][3][4]

``````

3个回答

datax 000 001 010 011 100 101 110 111
sum 0 1*3 1*2 1*2+1*3 1*1 1*1+1*3 1*1+1*2 1*1+1*2+1*3

``````

import java.util.ArrayList;
import java.util.List;

public class A {
public static Integer[] datas = new Integer[]{1,2,3,4,5,6,7,8,9,10,11};
public static Integer[] datasx = new Integer[datas.length];
public static Integer y = 100;
public static void main(String[] args) {

Integer min = 6;
Integer max = 12;
Integer count = 3;
List<List<Integer>> test = three(datas, min, max, count);

for(List<Integer> list : test){
for(Integer t:list){
System.out.print("["+t+"]");
}
System.out.println();
}

// dox(32,min,max,3);

}

public static List<List<Integer>> three(Integer datas[], Integer min, Integer max,Integer count){
List<Integer> result = new ArrayList<Integer>();
List<List<Integer>> list  = new ArrayList<List<Integer>>();
double b = (double)datas.length;
Integer u = (int)Math.pow(2.0, b)-1;
System.out.println("wjc"+u);
int y = 0;
while(y < u){
y+=1;
result = dox(y,min,max,count);
if(result != null){
}

}
return list;
}
private static List<Integer> dox(int parseInt,Integer min, Integer max,Integer count) {
// TODO Auto-generated method stub

List<Integer> result1 = new ArrayList<>();
int sum = 0;
int j = 0;
int y = 0;
int p;
for(int i = 0;i<datasx.length;i++){
datasx[i] = 0;
}

if(y>count){
return null;
}

while(parseInt>0){
p = parseInt%2;
parseInt = parseInt/2;
if(p == 1){
y++;
}
datasx[j++] = p;
}

for(int i = datasx.length-1;i>=0;i--){
//  System.out.print(datasx[i]);
sum += datas[datas.length-1-i]*datasx[i];
}
//System.out.println();
//System.out.println(sum);
if(sum >= min && sum <=max){
return result1;
}
return null;
}

}

``````

MY_MAIN 回复echo_wjcwjc: 看懂了，谢谢啦

echo_wjcwjc 回复MY_MAIN: 全部解释太烦了

echo_wjcwjc 回复MY_MAIN: 你哪里没看懂的。发下代码过来，我给你解释把

echo_wjcwjc 回复MY_MAIN: 至于这个是啥算法。感觉像贪心

echo_wjcwjc 回复MY_MAIN: 这个是我老早以前,好像看一本<<妙趣横生的算法>>里面学的。其实这个算法时间复杂度有点高。你要学算法的话可以看一下小甲鱼的数据结构然后去杭电hdu里面或者蓝桥杯里面做题。

MY_MAIN 哦，看懂了，好神奇，datax里的二进制中 000；001；010。。。都是每个组合，把满足组合的放进list就可以了6666666666666

MY_MAIN 大佬六啊，能告诉我你用的什么算法吗，= - =有些地方没看懂，我准备网上搜搜看

``````Integer[] datas = new Integer[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 目标数组
Integer min = 6;// 大于等于的值
Integer max = 12;// 小于等于的值
Integer count = 3;// 指定数量
// 遍历cont为1
for (int i = 0; i < datas.length; i++) {
if (min<=datas[i]&&datas[i]<=max) {
System.out.println(i);
}
}
// count 为2 时候
for (int i = 0; i < datas.length; i++) {
for (int j = i+1; j < datas.length; j++) {
int sum2=datas[i]+datas[j];
if (min<=sum2&&sum2<=max) {
System.out.println("第一个下标为:"+i+"第二个下标为:"+j);
}

}

}
// count 为3的时候
for (int i = 0; i < datas.length; i++) {
for (int j = i+1; j < datas.length; j++) {
for (int k = j+1; k < datas.length; k++) {

int sum3=datas[i]+datas[j]+datas[k];
if (min<=sum3&&sum3<=max) {
System.out.println("第一个下标为:"+i+"第二个下标为:"+j+"第三个下标是:"+k);
}
}

}

}
``````

javascript怎么实现两个数组中随机两个相加？相加的结果用alet方式进行输出？

javascript怎么实现两个数组中随机两个相加？相加的结果用alet方式进行输出？谢谢

javascpt怎么将两个数组的结果相加，得到一个新的数组呢，非要循环实现么？不用循环怎么写？

javascpt怎么将两个数组的结果相加，得到一个新的数组呢，非要循环实现么？不用循环怎么写？

Java数组求和，新手求问

public class T12 { public static double sumArray(double[] array){ static double sum = 0; int i; for(i=0;i<array.length;i++) sum += array[i]; return sum; } public static void main(String[] args) { double[] array = {1,2,3,4,5,6,7,8,9}; double a; a = T12.sumArray(double[] array); System.out.println(a); } } 上面代码有什么问题吗，为什么不能运行？

JAVA_数组_泛型：我写了一个数组结合泛型的通用求和方法，求帮忙优化，写的太烂了

=====《求求大神帮我优化下啊，我写的太烂了》==== public static void main(String[] args) { Number[] num1 = {2, 3, 3, 4, 5}; //Integer Number[] num2 = {1.1, 2.0, 3.0, 4.0, 5.0}; //Double System.out.println(num1[0].getClass().getTypeName()); System.out.println(new ArraysTest().ArraysSum(num2)); } public static <T extends Number> T ArraysSum(T[] num) { System.out.println(num.getClass().getTypeName()); Double sum = 0.0; for (int i = 0; i < num.length; i++) { sum += num[i].doubleValue(); } if (num[0].getClass().getTypeName().equals("java.lang.Integer")){ Integer result = (int)((double)sum); return (T)result; } if (num[0].getClass().getTypeName().equals("java.lang.Double")){ Double result = sum.doubleValue(); return (T)result; } return (T)sum; } 如何结合instanceof 更加智能的判断？

<div class="post-text" itemprop="text"> <p>I want to sum the values of the following array I would like to group the same items by cumulating them, the output format would also be an array</p> <pre><code>Array ( [0] =&gt; Array ( [0] =&gt; Array ( [0] =&gt; R421_FD03 [1] =&gt; 1 ) [1] =&gt; Array ( [0] =&gt; R421_FD03 [1] =&gt; 1 ) ) [1] =&gt; Array ( [0] =&gt; Array ( [0] =&gt; R421_FD03 [1] =&gt; 1 ) [1] =&gt; Array ( [0] =&gt; R421_FD02 [1] =&gt; 1 ) ) ) </code></pre> <p>I tested this code but the result is not the one I'm waiting for:</p> <pre><code>\$sumArray = array(); array_walk_recursive(\$data, function(\$item, \$key) use (&amp;\$sumArray){ \$sumArray[\$key] = isset(\$sumArray[\$key]) ? \$item + \$sumArray[\$key] : \$item; }); </code></pre> <p>The result I'm waiting for is this one</p> <pre><code>Array ( [0] =&gt; Array ( [0] =&gt; R421_FD03 [1] =&gt; 3 ) [1] =&gt; Array ( [0] =&gt; R421_FD02 [1] =&gt; 1 ) ) ) </code></pre> </div>

Java数组相加求和的问题，用循环怎么实现的，谁有代码的例子编写下

Java数组相加求和的问题，用循环怎么实现的，谁有代码的例子编写下

python使用pandas两数组相加

char a[1000],b[1000] 两个数组里都是数字

Java int二维数组值的变化

java用多线程数组求和

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内，我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年，古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合，再掺入煅烧石灰石制成的石灰，由此得来了人...

loonggg读完需要3分钟速读仅需 1 分钟大家好，我是你们的校长。我之前讲过，这年头，只要肯动脑，肯行动，程序员凭借自己的技术，赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

MySQL数据库面试题（2020最新版）

HashMap底层实现原理，红黑树，B+树，B树的结构原理 Spring的AOP和IOC是什么？它们常见的使用场景有哪些？Spring事务，事务的属性，传播行为，数据库隔离级别 Spring和SpringMVC，MyBatis以及SpringBoot的注解分别有哪些？SpringMVC的工作原理，SpringBoot框架的优点，MyBatis框架的优点 SpringCould组件有哪些，他们...

《经典算法案例》01-08：如何使用质数设计扫雷（Minesweeper）游戏

《Oracle Java SE编程自学与面试指南》最佳学习路线图（2020最新版）