fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. pair<int, int> findMaxAndSecondMax(const std::vector<int>& arr) {
  5. int maxIndex = -1;
  6. int secondMaxIndex = -1;
  7.  
  8. if (arr.size() < 2) {
  9. return {-1, -1};
  10. }
  11.  
  12. if (arr[0] >= arr[1]) {
  13. maxIndex = 0;
  14. secondMaxIndex = 1;
  15. } else {
  16. maxIndex = 1;
  17. secondMaxIndex = 0;
  18. }
  19. for (int i = 2; i < arr.size(); ++i) {
  20. if (arr[i] > arr[maxIndex]) {
  21. secondMaxIndex = maxIndex;
  22. maxIndex = i;
  23. } else if (arr[i] > arr[secondMaxIndex] && arr[i] < arr[maxIndex]) {
  24. secondMaxIndex = i;
  25. }
  26. }
  27.  
  28. if (arr[maxIndex] == arr[secondMaxIndex]) {
  29. return {-1, -1};
  30. }
  31.  
  32. return {maxIndex, secondMaxIndex};
  33. }
  34.  
  35. bool areAllElementsEqual(vector<int>& arr) {
  36. if (arr.empty()) {
  37. return true;
  38. }
  39. for (int i = 1; i < arr.size(); ++i) {
  40. if (arr[i] != arr[0]) {
  41. return false;
  42. }
  43. }
  44. return true;
  45. }
  46.  
  47. int minSteps(vector<int>& arr) {
  48. int count = 0;
  49. while (!areAllElementsEqual(arr)) {
  50. pair<int, int> indices = findMaxAndSecondMax(arr);
  51.  
  52. if (indices.first == -1) {
  53. // This happens when all elements are already equal
  54. break;
  55. }
  56.  
  57. int maxIndex = indices.first;
  58. int secondMaxIndex = indices.second;
  59.  
  60. arr[maxIndex] = arr[secondMaxIndex];
  61.  
  62. count++;
  63. }
  64. return count;
  65. }
  66.  
  67. int main() {
  68. vector<int> arr1 = {4, 5, 5, 2, 4};
  69. cout << "Steps for {4, 5, 5, 2, 4}: " << minSteps(arr1) << std::endl;
  70.  
  71. vector<int> arr2 = {886, 777};
  72. cout << "Steps for {886, 777}: " << minSteps(arr2) << std::endl;
  73.  
  74. vector<int> arr3 = {1, 1, 1, 1};
  75. cout << "Steps for {1, 1, 1, 1}: " << minSteps(arr3) << std::endl;
  76.  
  77. return 0;
  78. }
Success #stdin #stdout 0s 5312KB
stdin
Standard input is empty
stdout
Steps for {4, 5, 5, 2, 4}: 2
Steps for {886, 777}: 1
Steps for {1, 1, 1, 1}: 0