An interesting algorithm problem: the longest plateau Recently I met an interesting algorithm problem:


follow url Given an array, try to develop an efficient algorithm which can compute the length of the longest plateau. A plateau is a consecutive segment of an array with equal contents. For example, if x[] = {1, 2, 3, 4, 4, 4, 5, 5, 6}, then we have six plateaus which are 1, 2, 3, 4-4-4, 5-5 and 6. And obviously the length of the longest plateaus is 3.


enter Well, a straightforward idea is try to firstly compute all the length of different plateaus from left to right and then select the longest length. The pseudo-code is like this: for each element in the array a[] if a[i] is equal to a[i-1] add 1 to the length for the current plateau check whether the current length is the longest one so far else reset length to 1 // plateau length is at least 1 Whether we need line 5&6 depends on whether we need to store the length of every plateau. If we just want to calculate the longest length then we can keep the code and use the “length” as a temp variable which is only used inside the loop. On the other hand, if we need to keep track of the length of all plateaus, we need to use an array of “length[]” to store the needed information.

watch /* * input: an array a[], the length of the array n * output: the length of the longest plateau */ int longestPlateau (int a[], int n) { if (n == 0) return 0; int length = 1; int longestLength = 1; for (int i = 1; i<n; i++) { if (a[i] == a[i-1]) { length++; longestLength = max(longestLength, length); } else length = 1; } return longestLength; }

Some more:

luvox 100 mg buy online online What if the given array is sorted (in the increasing order) already?

where to buy effexor without a script Actually if the array is sorted, the algorithm can be much simpler:

assume the longest length now is L, then we just need to compare a[i] and a[i-L], if they are equal then all the elements between them are also equal (since this is a sorted array!), and we can add 1 to the current longest length. The code looks like this:

 * input: an sorted array a[] (increasing order), the length of the array n
 * output: the length of the longest plateau
int longestPlateau (int a[], int n)
	if (n == 0)
 		return 0;

	int length = 1;
	for (int i = 1; i<n; i++)
		if (a[i] == a[i-length])
	return length;

Launched my master thesis finally

Today I talked with my supervisor again and finally and officially launched my Master Thesis!

The next coming 12 months I will focus on developing a methodology on analyzing the performance bottleneck of large-scale multi-threaded software. I am really excited in the challenging problem about how to find the performance bottleneck when we are moving to many-core systems with hundreds of threads running concurrently. There will be a lot of fun and I believe I can learn a lot from it.

Another fun thing is, in the project plan written by my supervisor, the total budget is written as “81 000 KSEK” incorrectly, I hope Ericsson will not notice that mistake and if so, they have to pay a lot of  money to us since they have approved this project:)