出材率算法
从中找出最接近该数字的子序列*/
int []arr= {1,2,3,4,5,6,7};//给定序列
指定数字
int i=8;
结果集
[[2, 6], [3, 5],[7,1],[4]];
package com.alipay.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
@Controller
public class TestController2 {
@RequestMapping("/first")
public String first() {
return "index";
}
public static void main(String[] args){
ArrayList<List<Integer>> objects = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
Random random = new Random();
int i = random.nextInt(50);
Integer[] arr=new Integer[i];
for (int i1 = 0; i1 < i; i1++) {
int i2 = random.nextInt(100)+100;
arr[i1]=i2;
}
getNumberThree(objects,temp,arr, 500);
System.out.println(objects);
Integer tempint =0;
for (Integer integer : arr) {
tempint+=integer;
}
System.out.println(tempint);
System.out.println((objects.size()*500));
}
public static void getNumberThree(List<List<Integer>> objects,List<Integer> temp,Integer[] intarray, Integer number) {
final int ltlong = 500;
if (intarray.length == 0) {
objects.add(temp);
return;
}
int result ;
int tempindex ;
int[] numberThree2 = getNumberThree2(intarray, number);
result =numberThree2[0];
tempindex = numberThree2[1];
if (number < result) {
number = ltlong;
objects.add(temp);
temp = new ArrayList<>();
} else {
temp.add(result);
number = number - result;
intarray = delete(tempindex, intarray);
}
getNumberThree(objects,temp,intarray, number);
}
public static Integer[] delete(int index, Integer array[]) {
Integer[] arrNew = new Integer[array.length - 1];
for (int i = 0; i < array.length - 1; i++) {
if (i < index) {
arrNew[i] = array[i];
} else {
arrNew[i] = array[i + 1];
}
}
return arrNew;
}
public static int[] getNumberThree2(Integer[] intarray, Integer number) {
int[] jieguo = new int[2];
ArrayList<Integer> ints = new ArrayList<>();
for (Integer integer : intarray) {
if (integer<=number){
ints.add(integer);
}
}
Integer[] ints1 = new Integer[ints.size()];
for (int i = 0; i < ints.size(); i++) {
ints1[i]=ints.get(i);
}
if (ints1.length==0){
jieguo[0]=Integer.MAX_VALUE;
jieguo[1]=0;
return jieguo;
}
int index = Math.abs(number-ints1[0]);
int result = ints1[0];
for (int i : ints1) {
int abs = Math.abs(number-i);
if(abs <= index){
index = abs;
result = i;
}
}
for (int i = 0; i < intarray.length; i++) {
if (intarray[i]==result){
jieguo[1]=i;
break;
}
}
jieguo[0]=result;
return jieguo;
}
}