要求:將連續數的數分成一組,不連續的分成另一組。如1、2、3、5、7、8,輸出1-3、5-5、7-8。
Bean對象儲存分組的最大值和最小值。並提供將某數增加到該分組的方法。代碼如下:
public class Bean{private int minValue;private int maxValue;public boolean add(int value){if (value >= minValue && value <= maxValue){// 已經存在該區間內,do nothingreturn true;}if (value == minValue - 1){// 比最小值小1,拓展最小值minValue = value;return true;}if (value == maxValue + 1){// 比最大值大1,則拓展最大值maxValue = value;return true;}// 其他情況都增加該區間失敗return false;}public int getMinValue(){return minValue;}public void setMinValue(int minValue){this.minValue = minValue;}public int getMaxValue(){return maxValue;}public void setMaxValue(int maxValue){this.maxValue = maxValue;}}
BeanList類為List集合的簡單封裝。對外也提供將數字加入到某分組的方法,由於加入某個數字,可能會將兩個分組合并成一個分組,如原來1-3和5-6組,加入4後,必須合并為1-6組,如下方法實現邏輯:如果某一個數字加入兩個分組成功,則這兩個分組可以合并。
public class BeanList{private List<Bean> beanList = new ArrayList<Bean>();public void add(int value){Bean existBean = null;for (Bean bean : beanList){if (bean.add(value)){if (existBean != null){// 增加一個資料最多使兩個區間合并merge(bean, existBean);return;}existBean = bean;}}if (existBean == null){addIfNotExist(value);}}private void addIfNotExist(int value){Bean bean = new Bean();bean.setMinValue(value);bean.setMaxValue(value);beanList.add(bean);}private void merge(Bean existBean, Bean deleteBean){if (existBean.getMaxValue() == deleteBean.getMinValue()){existBean.setMaxValue(deleteBean.getMaxValue());beanList.remove(deleteBean);}else if (existBean.getMinValue() == deleteBean.getMaxValue()){existBean.setMinValue(deleteBean.getMinValue());beanList.remove(deleteBean);}}public void print(){for (Bean bean : beanList){System.out.println(bean.getMinValue() + "======" + bean.getMaxValue());}}}
測試類別。BeanList只是簡單將結果列印出來。
public class Test{public static void main(String[] args){List<Integer> list = new ArrayList<Integer>();list.add(8);list.add(10);list.add(9);list.add(1);list.add(3);list.add(4);list.add(5);list.add(7);list.add(6);BeanList beanList = new BeanList();for (Integer aa : list){beanList.add(aa.intValue());}beanList.print();}}