文章目錄
最近又把冼镜光的《C语言名题精选百则–技巧篇》拿出来看看,确实不错。
已知一个已经从小到大排序的数组,这个数组中的一个平台(plateau) 就是连续的一串相同的元素,并且这一串元素不能再延伸。例如,在1,2,2,3,3,3,4,5,5,6中1,2.2,3.3.3,4,5.5,6都是平台。试编写一个程序,接受一个数组,把这个数组中最长的平台找出来。在上面的例子中,3.3.3就是该数组的最长平台。
这个问题曾经困扰过计算机科学家David Gries,他给出的方法如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class Pleateau { public static int pleateau(int[] nums) { int length = 1; for (int i = 1; i < nums.length; i++) { if (nums[i] == nums[i - length]) { length++; } } return length; } public static void main(String[] args) { int[] nums = {1, 2, 2, 3, 3, 3, 4, 5, 5, 5, 5, 6}; System.out.println(pleateau(nums)); } }
|
自己想到的方法如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public class Pleateau { public static int pleateau(int[] nums) { int length = 1; int i = 0; while (i + length < nums.length) { if (nums[i] == nums[i + length]) { length++; } else { i += length; while (i < nums.length && i > 0 && nums[i] == nums[i - 1]) { i--; } } } return length; } public static void main(String[] args) { int[] nums = {1, 2, 2, 3, 3, 3, 4, 5, 5, 5, 5, 6}; System.out.println(pleateau(nums)); } }
|