讨论/算法和数据结构/一道由实际工作转变而来的算法题/
一道由实际工作转变而来的算法题
public static void main(String[] args) {
    //将连续的数据取出,放置单独数组
    //注意:产生的数组个数是未知的,此处给定数据,实际不固定数据多少
    //结果如:int [] a={4,4,4,4,4,4} int b={2,2,2} int [] c={3,3,3,3} int d={4,4}
    int[] abc = {10,9,7,5,12,45,2,1,4,4,4,4,4,4,1,2,2,2,11,3,3,3,3,4,5,8,5,45,97,4,4};
    

}

希望可以得到答案,JAVA语言,使用流操作也可以

展开讨论
Penn发起于 2019-11-06
共 3 个讨论

可以保存连续元素的个数,不需要保存整个相同元素的数组:
例如:

[4,4,4,4,4]保存为[4,5]表示5个4
[2,2,2,2]保存为[2,4]表示4个2

c++代码示例:

#include<map>
#include<vector>
#include<iostream>
using namespace std;

int main(){
    vector<int> t={10,9,7,5,12,45,2,1,4,4,4,4,4,4,1,2,2,2,11,3,3,3,3,4,5,8,5,45,97,4,4};
    int cnt=0;
    int ele = t[0];
    vector<pair<int,int>> re;
    for(int i=0;i<(t.size()+1);i++){
        if(i==(t.size())||t[i]!=ele){
            if(cnt>1) re.push_back({ele,cnt});
            ele=t[i];
            cnt=1;
        }
        else cnt++;
    }
    for(auto item:re){
        cout<<item.first<<" "<<item.second<<endl;
    }
    return 0;
}
1

这个直接遍历,遍历到某个位置只需要寻找后面连续跟它一样的,形成线段,线段长度为1记录一下即可,见代码

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test {

    static List<int[]> split(int[] origin) {
        List<int[]> result = new ArrayList<>();
        int left = 0;
        while (left < origin.length) {
            int right = left + 1;
            while (right < origin.length && origin[right] == origin[left]) {
                right++;
            }
            if (right - left > 1) {
                int[] sub = new int[right - left];
                Arrays.fill(sub, origin[left]);
                result.add(sub);
            }

            left = right;
        }
        return result;
    }

    public static void main(String[] args) throws IOException {
        List<int[]> result = split(new int[]{10,9,7,5,12,45,2,1,4,4,4,4,4,4,1,2,2,2,11,3,3,3,3,4,5,8,5,45,97,4,4});
        for (int[] sub: result) {
            System.out.println(Arrays.toString(sub));
        }
    }

}
2

遍历数组,如果当前数与上一个数相等就开始取出到单独数组直到出现新数。这放简单题里都偏简单了,看这里的活跃度大概不怎么会有人来写这个。