给定一个List,里面存放的一组整数有正数和负数,要求把正数和负数分开,并得到正数和负数分割线索引(不要求排序,不能使用多层循环)
解答方法并不算太复杂,重点注意边界条件和极端条件(全是正或者全是负)
1 /** 2 * 给定一个List,里面存放的一组整数有正数和负数,要求把正数和负数分开,并得到正数和负数分割线索引(不要求排序,不能使用多层循环) 3 */ 4 private void testLeft() { 5 ArrayList<Integer> list = new ArrayList<Integer>(); 6 // for(int i = 0;i < 200;i++){ 7 list.add(1); 8 list.add(-5); 9 list.add(33); 10 list.add(-21); 11 list.add(12); 12 list.add(-9); 13 list.add(-999); 14 } 15 // list.add(-5); 16 // list.add(-5); 17 // list.add(-5); 18 // list.add(-5); 19 // list.add(-5); 20 // list.add(-5); 21 // list.add(-5); 22 int len = list.size(); 23 Log.i("xinye", "#######移动前:" + list); 24 int index = 0; 25 for(int i = 0;i < len;i++){ 26 if(i != 0){ 27 if(i == len - 1){ 28 if(list.get(i) < 0){ 29 index++; 30 } 31 }else{ 32 if(list.get(i) < 0){ 33 list.add(0, list.get(i)); 34 // 注意set和remove的时候的索引值 35 list.set(i + 1, list.get(list.size() - 1)); 36 list.remove(list.size() - 1); 37 index++; 38 } 39 } 40 }else{ 41 if(list.get(i) < 0){ 42 index++; 43 } 44 } 45 } 46 Log.i("xinye", "#######移动后:" + list); 47 Log.i("xinye", "#######索引:" + index); 48 49 }