Algunas preguntas de la prueba escrita encontradas por Niuke.com

Directorio de artículos

Intercambio de elementos de matriz

  • Pregunta :
    Niuniu tiene una matriz a sin elementos repetidos. Quiere intercambiar las posiciones del n-ésimo número más grande y el m-ésimo número más grande en la matriz (ordenados de mayor a menor). ¿Puedes ayudarlo? Dada una matriz a, encuentre la matriz después de intercambiar el n-ésimo elemento más grande y el m-ésimo elemento más grande.
    Ejemplo:
输入:
[1,2],1,2

输出:
[2,1]
  • Resuelve el código
class Solution {
public:
    /**
     *
     * @param a int整型vector 原始数组a
     * @param n int整型 第n大
     * @param m int整型 第m大
     * @return int整型vector
     */
    vector<int> sovle(vector<int>& a, int n, int m) {
        // write code here
        int s = a.size();
        vector<int> temp(a);
        int p_1 = findKthElement(temp, 0, s - 1, s - m);
        int p_2 = findKthElement(temp, 0, s - 1, s - n);
        int p1, p2;
        for(int i = 0; i < s; i++){
            if(a[i] == p_1)
                p1 = i;
            else if(a[i] == p_2)
                p2 = i;
        }
        swap(a[p1], a[p2]);
        return a;
    }
    int partition(vector<int> &a, int l, int r){
        int v = a[l];
        //[l+1, ... , j] < v. [j + 1, ... , r] > v
        int j = l;
        for(int i = l + 1; i <= r; i++){
            if(a[i] < v){
                swap(a[++j], a[i]);
            }
        }
        swap(a[l], a[j]);
        return j;
    }
     
    int findKthElement(vector<int> &a, int l, int r, int k){
        if(l == r)
            return a[l];
        int p = partition(a, l, r);
        if( p == k)
            return a[p];
        if(p > k){
            return findKthElement(a, l, p - 1, k);
        }
        else
            return findKthElement(a, p + 1, r, k);
    }
};

Supongo que te gusta

Origin blog.csdn.net/qq_41782149/article/details/107707618
Recomendado
Clasificación