Tìm vị trí của phần tử max


82

Có một hàm tiêu chuẩn trả về vị trí (không phải giá trị) của phần tử tối đa của một mảng giá trị không?

Ví dụ:

Giả sử tôi có một mảng như thế này:

sampleArray = [1, 5, 2, 9, 4, 6, 3]

Tôi muốn một hàm trả về số nguyên của 3 cho tôi biết đó sampleArray[3]là giá trị lớn nhất trong mảng.

Câu trả lời:


134

Trong STL, std::max_elementcung cấp trình vòng lặp (có thể được sử dụng để lấy chỉ mục std::distance, nếu bạn thực sự muốn).

int main(int argc, char** argv) {
  int A[4] = {0, 2, 3, 1};
  const int N = sizeof(A) / sizeof(int);

  cout << "Index of max element: "
       << distance(A, max_element(A, A + N))
       << endl;

  return 0;
}

5
Độ phức tạp về thời gian của việc sử dụng hàm distance () là gì?
Abhipso Ghosh

Theo các tài liệu , độ phức tạp của nó quy mô tuyến tính trừ khi trình lặp được cung cấp là a RandomAccessIterator, trong trường hợp đó, nó không đổi theo thời gian. Trong mọi trường hợp, việc tối ưu hóa được thực hiện nội bộ cho bạn.
Scorch

28

Hoặc, được viết bằng một dòng:

std::cout << std::distance(sampleArray.begin(),std::max_element(sampleArray.begin(), sampleArray.end()));

Điều này không hoạt động với mảng, mà câu hỏi gợi ý là cấu trúc chung được sử dụng, vì mảng không phải là kiểu lớp và do đó chúng không có hàm thành viên như .begin () hoặc .end (). Tôi nghĩ rằng bạn có thể điều chỉnh mã của mình bằng cách sử dụng std :: begin (sampleArray) và std :: end (sampleArray) thay vì sampleArray.begin () và sampleArray.end () nếu bạn đang sử dụng trình biên dịch đủ gần đây, mặc dù tôi cá nhân tôi thích câu trả lời được chấp nhận vì nó sẽ chạy bất kể phiên bản C ++ nào được sử dụng
Manjia

6

Bạn có thể sử dụng max_element()hàm để tìm vị trí của phần tử max.

int main()
{
    int num, arr[10];
    int x, y, a, b;

    cin >> num;

    for (int i = 0; i < num; i++)
    {
        cin >> arr[i];
    }

    cout << "Max element Index: " << max_element(arr, arr + num) - arr;

    return 0;
}

0

std::max_elementlấy hai trình vòng lặp để phân tách một chuỗi và trả về một trình vòng lặp trỏ đến phần tử lớn nhất trong chuỗi đó. Ngoài ra, bạn có thể chuyển một vị từ cho hàm xác định thứ tự của các phần tử.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.