Register
|
Login
Home
News
Competitions
Practice
How to
Rankings
Calendar
Arena
CodeFu 2007
CodeFu'07 Highlights
Jazoon'07 Highlights
Schedule
Rules
Prizes
Results
Competitions
»
Main CodeFu Competitons
»
CodeFu 2007
»
Results
CodeFu 2007 Results
CodeFu Final Round Results
peceps's solution for 200: Consecutive Numbers, written in Java
import java.lang.reflect.Array; import javax.naming.ldap.SortControl; import sun.misc.Sort; public class ConsecutiveNumbers { int[] a = null; int max = 0; boolean[] zeros = null; int consumeCount = 0; public static void main(String[] args) { int[] a = { 1, 4, 0, 0 }; ConsecutiveNumbers numbers = new ConsecutiveNumbers(); System.out.println(numbers.longestSequence(a)); } public int longestSequence(int[] numbers) { int zerosCount = 0; for (int i = 0; i < numbers.length; i++) { for (int j = 0; j < numbers.length - 1; j++) { int x = numbers[j]; int y = numbers[j + 1]; if (x > y) { numbers[j] = y; numbers[j + 1] = x; } } } for (int i = 0; i < numbers.length; i++) { if (numbers[i] == 0) { zerosCount++; } } a = new int[numbers.length - zerosCount]; int t = 0; for (int i = 0; i < numbers.length; i++) { if (numbers[i] != 0) { a[t++] = numbers[i]; } // System.out.print(numbers[i] + ", "); } zeros = new boolean[zerosCount]; refreshZeros(); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + ", "); } for (int i = 0; i < a.length - 1; i++) { int start = i; int cur = tryToContinue(start, -1); if (cur > max) { max = cur; } refreshZeros(); } return max; } int tryToContinue(int start, int lastConsumed) { int sum = 0; if ((start + 1 < a.length) && (a[start + 1] == a[start] + 1)) { // sum++; sum += tryToContinue(start + 1, -1); } else { // See if we have a need for consuming // f() // if(start+1>=a.length){ // return sum; // } boolean b = false; try { boolean b1 = (lastConsumed != -1); boolean b2 = (lastConsumed +1 == a[start + 1] ); b = (b1 && b2); } catch (Exception e) { } if (b) { sum += tryToContinue(start + 1, -1); } else { if (consumeZero()) { consumeCount++; if (lastConsumed != -1) { sum += tryToContinue(start, lastConsumed + 1); } else { sum += tryToContinue(start, a[start] + 1); } } else { return ++sum; } } } return ++sum; } void refreshZeros() { for (int i = 0; i < zeros.length; i++) { zeros[i] = true; } consumeCount = 0; } boolean consumeZero() { for (int i = 0; i < zeros.length; i++) { if (zeros[i]) { zeros[i] = false; return true; } } return false; } }