关于置顶问题的一个小算法

问题叙述:当 有数组(或集合)内容为 [1、2、3、4、5、6、7] 时,将其中一位或多位元素移动至头部,移动后的顺序为原先的顺序,此后的每次移动均添加至数组(或集合)的头部。

解决思路:如果一个的话,就把这一个数据移动到头部并删除原先位置的数据,如果多个数据,就循环从最后边把数据移动到头部

相关代码:

/**
  * 集合置顶功能
  * 实现思路:如果一个的话,就把这一个数据移动到头部并删除原先位置的数据,如果多个数据,就循环从最后边把数据移动到头部
  * @param values
  */
 private static void newArr(int... values){//可变数组,里面存储内容为元素下标
  int length = values.length;//数组长度
  for(int i=length-1;i>=0;i--){//循环取出数组中的最后一个值把它添加到头部
   int c = length -1 - i;//计算下标移动的距离
   arr2.add(0,arr2.get(values[i]+c));
   arr2.remove(values[i]+c+1);
  }
 }

 

结果:

      

       第一次置顶(置顶数据为1、3、6):[1, 3, 6, 2, 4, 5, 7]

       第二次置顶(置顶数据为2):[2, 1, 3, 6, 4, 5, 7]

 

注意:此代码暂时没有完成取消置顶的功能。已经置顶的数据不应该能够置顶,此功能暂未实现

你可能感兴趣的:(关于置顶问题的一个小算法)