Java:按值拆分数组
我正在尝试按值将数组拆分为子数组。例如(删除了Java:按值拆分数组,java,Java,我正在尝试按值将数组拆分为子数组。例如(删除了main函数delaration和类名): int[]arr={1,5,3,4,2,2,5,3,1}; 用于(int i:splitByVal(arr)){ 系统输出打印LN(i); } 我已经有一种方法可以做到这一点: public int[][]splitByVal(arr){ int previitem=arr[0]; ArrayList chunks=新的ArrayList(); ArrayList currentChunk=新的Array
main
函数delaration和类名):
int[]arr={1,5,3,4,2,2,5,3,1};
用于(int i:splitByVal(arr)){
系统输出打印LN(i);
}
我已经有一种方法可以做到这一点:
public int[][]splitByVal(arr){
int previitem=arr[0];
ArrayList chunks=新的ArrayList();
ArrayList currentChunk=新的ArrayList();
用于(int i:arr){
如果(i==previitem){
(i)加入(i);
}
否则{
添加((整数[])currentChunk.toArray());
currentChunk.clear();
}
前一项=i;
}
返回chunks.toArray()
}
我想知道的是:有更好的方法吗?正如评论中正确提到的那样,您没有在代码中提供
坡度的定义。因此,还不完全清楚您的代码在做什么
但是,如果我理解正确,这只是其中一种可能的方法:
public int[][] splitByValue(final int[] arr) {
Map<Integer, Integer> map = new HashMap<>();
for (int number : arr) {
map.put(number, map.getOrDefault(number, 0) + 1);
}
int[][] result = new int[map.keySet().size()][];
int i = 0;
for (Integer key : map.keySet()) {
result[i] = new int[map.get(key)];
for (int j = 0; j < result[i].length; j++) {
result[i][j] = key;
}
i++;
}
return result;
}
public int[]splitByValue(最终int[]arr){
Map Map=newhashmap();
用于(整数编号:arr){
map.put(number,map.getOrDefault(number,0)+1);
}
int[][]结果=新的int[map.keySet().size()][];
int i=0;
for(整数键:map.keySet()){
结果[i]=新整数[map.get(key)];
对于(int j=0;j
这里的假设是您只处理整数数组。什么是slope
?如果当前元素与previitem
不同,则previitem=i代码>。你应该把.add(i)
放在之外,否则
block@mangusta对不起,我写这个问题的时候正在读别的东西<代码>坡度
应为i
。