Java || K-Kadanes || 3ms || beats 92% || T.C - O(N) S.C - O(1)
\n    // O(arr.length) O(1)\n\tpublic int kConcatenationMaxSum(int[] arr, int k) {\n\n\t\tif (k == 1)\n\t\t\treturn kadanes(arr);\n\n\t\tint sum = arr[0], mod =
\n    // O(arr.length) O(1)\n\tpublic int kConcatenationMaxSum(int[] arr, int k) {\n\n\t\tif (k == 1)\n\t\t\treturn kadanes(arr);\n\n\t\tint sum = arr[0], mod = 1_000_000_007, len1 = arr.length, len2 = 2 * len1, cmax = arr[0], omax = arr[0];\n\t\tfor (int i = 1; i < len2; i++) {\n            int idx = i%len1;\n\t\t\tsum += arr[idx];\n\t\t\tcmax += arr[idx];\n\t\t\tif (arr[idx] > cmax)\n\t\t\t\tcmax = arr[idx];\n\t\t\tif (cmax > omax)\n\t\t\t\tomax = cmax;\n\t\t}\n        sum = sum/2;\n\n\t\tint ans = (sum <= 0) ? omax : (int) ((omax + ((long) k - 2) * sum) % mod);\n\t\treturn (ans >= 0) ? ans : 0;\n\t}\n\n\t// O(arr.length) O(1)\n\tpublic int kadanes(int[] arr) {\n\n\t\tint len = arr.length, omax = arr[0], cmax = arr[0];\n\t\tfor (int i = 1; i < len; i++) {\n\t\t\tcmax += arr[i];\n\t\t\tif (arr[i] > cmax)\n\t\t\t\tcmax = arr[i];\n\t\t\tif (cmax > omax)\n\t\t\t\tomax = cmax;\n\t\t}\n\t\treturn omax;\n\t}
[]