Ideone.com requires JavaScript to work.
fork(5) download loading...
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace Interview_ArithmeticSequence
  5. {
  6. class Program
  7. {
  8. internal class Pair
  9. {
  10. public int First { get; set; }
  11. public int Second { get; set; }
  12. }
  13. public static int GetMaxLengthOfArithmeticSequence(int[] numbers)
  14. {
  15. Array.Sort(numbers);
  16. var hashTable = BuildHashTable(numbers);
  17. return Analyze(hashTable, numbers.Length);
  18. }
  19. private static Dictionary<int, List<Pair>> BuildHashTable(int[] numbers)
  20. {
  21. var hashTable = new Dictionary<int, List<Pair>>();
  22. for(int i = 0; i < numbers.Length; ++i)
  23. {
  24. for(int j = i + 1; j < numbers.Length; ++j)
  25. {
  26. Pair pair = new Pair
  27. {
  28. First = i,
  29. Second = j
  30. };
  31. int diff = numbers[j] - numbers[i];
  32. if(hashTable.Keys.Contains(diff))
  33. {
  34. hashTable[diff].Add(pair);
  35. }
  36. else
  37. {
  38. List<Pair> newValue = new List<Pair>();
  39. newValue.Add(pair);
  40. hashTable[diff] = newValue;
  41. }
  42. }
  43. }
  44. return hashTable;
  45. }
  46. private static int Analyze(Dictionary<int, List<Pair>> hashTable, int lengthOfNumbers)
  47. {
  48. int maxLength = 0;
  49. foreach(var key in hashTable.Keys)
  50. {
  51. int[] lengths = new int[lengthOfNumbers];
  52. for (int i = 0; i < lengthOfNumbers; ++i)
  53. {
  54. lengths[i] = 1;
  55. }
  56. foreach(Pair pair in hashTable[key])
  57. {
  58. lengths[pair.Second] = lengths[pair.First] + 1;
  59. }
  60. foreach(var length in lengths)
  61. {
  62. if(length > maxLength)
  63. {
  64. maxLength = length;
  65. }
  66. }
  67. }
  68. return maxLength;
  69. }
  70. private static void Test(string testName, int[] numbers, int expected)
  71. {
  72. if(GetMaxLengthOfArithmeticSequence(numbers) == expected)
  73. {
  74. Console.WriteLine(string.Format("{0} passed.", testName));
  75. }
  76. else
  77. {
  78. Console.WriteLine(string.Format("{0} FAILED.", testName));
  79. }
  80. }
  81. private static void Test1()
  82. {
  83. int[] numbers = { 1, 3, 2, 4, 8, 5, 7, 9, 11 };
  84. int expected = 6;
  85. Test("test1", numbers, expected);
  86. }
  87. private static void Test2()
  88. {
  89. int[] numbers = { 1, 2, 3, 4, 5, 6 };
  90. int expected = 6;
  91. Test("test2", numbers, expected);
  92. }
  93. private static void Test3()
  94. {
  95. int[] numbers = { 5, 4, 3, 2, 1 };
  96. int expected = 5;
  97. Test("test3", numbers, expected);
  98. }
  99. private static void Test4()
  100. {
  101. int[] numbers = { 3, 3, 3, 3 };
  102. int expected = 4;
  103. Test("test4", numbers, expected);
  104. }
  105. private static void Test5()
  106. {
  107. int[] numbers = { 3, 2, 1, 3, 7, 10, 3, 6, 9, 3 };
  108. int expected = 4;
  109. Test("test5", numbers, expected);
  110. }
  111. private static void Test6()
  112. {
  113. int[] numbers = { 8, 3, 0, 5, 4, 9, 2 };
  114. int expected = 4;
  115. Test("test6", numbers, expected);
  116. }
  117. private static void Test7()
  118. {
  119. int[] numbers = { 3, 2, 1, 3, 4, 5, 3, 6, 9, 3 };
  120. int expected = 6;
  121. Test("test7", numbers, expected);
  122. }
  123. private static void Test8()
  124. {
  125. int[] numbers = { 2, 10, 3, 6, 4, 5, 8, 9 };
  126. int expected = 5;
  127. Test("test8", numbers, expected);
  128. }
  129. private static void Test9()
  130. {
  131. int[] numbers = { 1, 6, 3, 5, 9, 7 };
  132. int expected = 5;
  133. Test("test9", numbers, expected);
  134. }
  135. static void Main(string[] args)
  136. {
  137. Test1();
  138. Test2();
  139. Test3();
  140. Test4();
  141. Test5();
  142. Test6();
  143. Test7();
  144. Test8();
  145. Test9();
  146. }
  147. }
  148. }
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpuYW1lc3BhY2UgSW50ZXJ2aWV3X0FyaXRobWV0aWNTZXF1ZW5jZQp7CiAgICBjbGFzcyBQcm9ncmFtCiAgICB7CiAgICAgICAgaW50ZXJuYWwgY2xhc3MgUGFpcgogICAgICAgIHsKICAgICAgICAgICAgcHVibGljIGludCBGaXJzdCB7IGdldDsgc2V0OyB9CiAgICAgICAgICAgIHB1YmxpYyBpbnQgU2Vjb25kIHsgZ2V0OyBzZXQ7IH0KICAgICAgICB9CgogICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IEdldE1heExlbmd0aE9mQXJpdGhtZXRpY1NlcXVlbmNlKGludFtdIG51bWJlcnMpCiAgICAgICAgewogICAgICAgICAgICBBcnJheS5Tb3J0KG51bWJlcnMpOwogICAgICAgICAgICB2YXIgaGFzaFRhYmxlID0gQnVpbGRIYXNoVGFibGUobnVtYmVycyk7CiAgICAgICAgICAgIHJldHVybiBBbmFseXplKGhhc2hUYWJsZSwgbnVtYmVycy5MZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgRGljdGlvbmFyeTxpbnQsIExpc3Q8UGFpcj4+IEJ1aWxkSGFzaFRhYmxlKGludFtdIG51bWJlcnMpCiAgICAgICAgewogICAgICAgICAgICB2YXIgaGFzaFRhYmxlID0gbmV3IERpY3Rpb25hcnk8aW50LCBMaXN0PFBhaXI+PigpOwogICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtYmVycy5MZW5ndGg7ICsraSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yKGludCBqID0gaSArIDE7IGogPCBudW1iZXJzLkxlbmd0aDsgKytqKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFBhaXIgcGFpciA9IG5ldyBQYWlyCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBGaXJzdCA9IGksCiAgICAgICAgICAgICAgICAgICAgICAgIFNlY29uZCA9IGoKICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICBpbnQgZGlmZiA9IG51bWJlcnNbal0gLSBudW1iZXJzW2ldOwogICAgICAgICAgICAgICAgICAgIGlmKGhhc2hUYWJsZS5LZXlzLkNvbnRhaW5zKGRpZmYpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGFzaFRhYmxlW2RpZmZdLkFkZChwYWlyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxQYWlyPiBuZXdWYWx1ZSA9IG5ldyBMaXN0PFBhaXI+KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlLkFkZChwYWlyKTsKICAgICAgICAgICAgICAgICAgICAgICAgaGFzaFRhYmxlW2RpZmZdID0gbmV3VmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gaGFzaFRhYmxlOwogICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEFuYWx5emUoRGljdGlvbmFyeTxpbnQsIExpc3Q8UGFpcj4+IGhhc2hUYWJsZSwgaW50IGxlbmd0aE9mTnVtYmVycykKICAgICAgICB7CiAgICAgICAgICAgIGludCBtYXhMZW5ndGggPSAwOwogICAgICAgICAgICBmb3JlYWNoKHZhciBrZXkgaW4gaGFzaFRhYmxlLktleXMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludFtdIGxlbmd0aHMgPSBuZXcgaW50W2xlbmd0aE9mTnVtYmVyc107CiAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aE9mTnVtYmVyczsgKytpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGxlbmd0aHNbaV0gPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZvcmVhY2goUGFpciBwYWlyIGluIGhhc2hUYWJsZVtrZXldKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGxlbmd0aHNbcGFpci5TZWNvbmRdID0gbGVuZ3Roc1twYWlyLkZpcnN0XSArIDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZm9yZWFjaCh2YXIgbGVuZ3RoIGluIGxlbmd0aHMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYobGVuZ3RoID4gbWF4TGVuZ3RoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG1heExlbmd0aDsKICAgICAgICB9CgogICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgVGVzdChzdHJpbmcgdGVzdE5hbWUsIGludFtdIG51bWJlcnMsIGludCBleHBlY3RlZCkKICAgICAgICB7CiAgICAgICAgICAgIGlmKEdldE1heExlbmd0aE9mQXJpdGhtZXRpY1NlcXVlbmNlKG51bWJlcnMpID09IGV4cGVjdGVkKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZShzdHJpbmcuRm9ybWF0KCJ7MH0gcGFzc2VkLiIsIHRlc3ROYW1lKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZShzdHJpbmcuRm9ybWF0KCJ7MH0gRkFJTEVELiIsIHRlc3ROYW1lKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgVGVzdDEoKQogICAgICAgIHsKICAgICAgICAgICAgaW50W10gbnVtYmVycyA9IHsgMSwgMywgMiwgNCwgOCwgNSwgNywgOSwgMTEgfTsKICAgICAgICAgICAgaW50IGV4cGVjdGVkID0gNjsKICAgICAgICAgICAgVGVzdCgidGVzdDEiLCBudW1iZXJzLCBleHBlY3RlZCk7CiAgICAgICAgfQoKICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIFRlc3QyKCkKICAgICAgICB7CiAgICAgICAgICAgIGludFtdIG51bWJlcnMgPSB7IDEsIDIsIDMsIDQsIDUsIDYgfTsKICAgICAgICAgICAgaW50IGV4cGVjdGVkID0gNjsKICAgICAgICAgICAgVGVzdCgidGVzdDIiLCBudW1iZXJzLCBleHBlY3RlZCk7CiAgICAgICAgfQoKICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIFRlc3QzKCkKICAgICAgICB7CiAgICAgICAgICAgIGludFtdIG51bWJlcnMgPSB7IDUsIDQsIDMsIDIsIDEgfTsKICAgICAgICAgICAgaW50IGV4cGVjdGVkID0gNTsKICAgICAgICAgICAgVGVzdCgidGVzdDMiLCBudW1iZXJzLCBleHBlY3RlZCk7CiAgICAgICAgfQoKICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIFRlc3Q0KCkKICAgICAgICB7CiAgICAgICAgICAgIGludFtdIG51bWJlcnMgPSB7IDMsIDMsIDMsIDMgfTsKICAgICAgICAgICAgaW50IGV4cGVjdGVkID0gNDsKICAgICAgICAgICAgVGVzdCgidGVzdDQiLCBudW1iZXJzLCBleHBlY3RlZCk7CiAgICAgICAgfQoKICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIFRlc3Q1KCkKICAgICAgICB7CiAgICAgICAgICAgIGludFtdIG51bWJlcnMgPSB7IDMsIDIsIDEsIDMsIDcsIDEwLCAzLCA2LCA5LCAzIH07CiAgICAgICAgICAgIGludCBleHBlY3RlZCA9IDQ7CiAgICAgICAgICAgIFRlc3QoInRlc3Q1IiwgbnVtYmVycywgZXhwZWN0ZWQpOwogICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBUZXN0NigpCiAgICAgICAgewogICAgICAgICAgICBpbnRbXSBudW1iZXJzID0geyA4LCAzLCAwLCA1LCA0LCA5LCAyIH07CiAgICAgICAgICAgIGludCBleHBlY3RlZCA9IDQ7CiAgICAgICAgICAgIFRlc3QoInRlc3Q2IiwgbnVtYmVycywgZXhwZWN0ZWQpOwogICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBUZXN0NygpCiAgICAgICAgewogICAgICAgICAgICBpbnRbXSBudW1iZXJzID0geyAzLCAyLCAxLCAzLCA0LCA1LCAzLCA2LCA5LCAzIH07CiAgICAgICAgICAgIGludCBleHBlY3RlZCA9IDY7CiAgICAgICAgICAgIFRlc3QoInRlc3Q3IiwgbnVtYmVycywgZXhwZWN0ZWQpOwogICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBUZXN0OCgpCiAgICAgICAgewogICAgICAgICAgICBpbnRbXSBudW1iZXJzID0geyAyLCAxMCwgMywgNiwgNCwgNSwgOCwgOSB9OwogICAgICAgICAgICBpbnQgZXhwZWN0ZWQgPSA1OwogICAgICAgICAgICBUZXN0KCJ0ZXN0OCIsIG51bWJlcnMsIGV4cGVjdGVkKTsKICAgICAgICB9CgogICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgVGVzdDkoKQogICAgICAgIHsKICAgICAgICAgICAgaW50W10gbnVtYmVycyA9IHsgMSwgNiwgMywgNSwgOSwgNyB9OwogICAgICAgICAgICBpbnQgZXhwZWN0ZWQgPSA1OwogICAgICAgICAgICBUZXN0KCJ0ZXN0OSIsIG51bWJlcnMsIGV4cGVjdGVkKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgICAgIHsKICAgICAgICAgICAgVGVzdDEoKTsKICAgICAgICAgICAgVGVzdDIoKTsKICAgICAgICAgICAgVGVzdDMoKTsKICAgICAgICAgICAgVGVzdDQoKTsKICAgICAgICAgICAgVGVzdDUoKTsKICAgICAgICAgICAgVGVzdDYoKTsKICAgICAgICAgICAgVGVzdDcoKTsKICAgICAgICAgICAgVGVzdDgoKTsKICAgICAgICAgICAgVGVzdDkoKTsKICAgICAgICB9CiAgICB9Cn0K
Success #stdin #stdout 0.05s 34032KB
stdin
Standard input is empty
stdout
test1 passed.
test2 passed.
test3 passed.
test4 passed.
test5 passed.
test6 passed.
test7 passed.
test8 passed.
test9 passed.
https://ideone.com/lEqNm3
Get the max length of an Arithmetic Sequence out of an array (No order limitation)
language:
C# (gmcs 5.20.1)
created:
12 years ago
visibility:
public

Share or Embed source code

Discover > Sphere Engine API

The brand new service which powers Ideone!

Discover > IDE Widget

Widget for compiling and running the source code in a web browser!

AltStyle によって変換されたページ (->オリジナル) /