Preguntas de la entrevista 10.11. Picos y valles (pensamiento)

LeetCode: Pregunta de la entrevista 10.11. Picos y valles

Inserte la descripción de la imagen aquí

Es un poco inteligente. Lo hice complicado al principio. Pensé en almacenar los picos y valles en dos listas y luego sobrescribir la matriz original. Luego descubrí que los números en algunos ejemplos no son picos ni valles (por ejemplo: nums [ i - 1] <números [i] <números [i + 1] números [i-1] <números [i] <números [i + 1]n u m s [ i-1 ]<n u m s [ i ]<n u m s [ i+1 ] ) Este


Ideas de resolución de problemas:

Suponiendo que la matriz está organizada en el orden pico-valle-pico, recorra la matriz una vez:

(1) Si i es la posición del pico, juzgar si la posición actual es menor que la posición anterior (la anterior es el valle), si es menor, intercambiar, y si es mayor, no procesar.
Es decir: if (nums [i] <nums [i-1]) swap (nums [i], nums [i-1]);

(2) Si i es la posición del valle, juzgar si la posición actual es mayor que la posición anterior (la anterior es el pico), si es mayor, intercambiar, y si es mayor, no procesar.
Es decir: if (nums [i]> nums [i-1]) swap (nums [i], nums [i-1]);



Código AC

class Solution {
    
    
    public void wiggleSort(int[] nums) {
    
    
        int len = nums.length;
        // 按照 峰谷峰来安排
        for(int i = 1; i < len; i++) {
    
    
            if(i % 2 == 0) {
    
    
                // 峰

                // 如果不是峰
                if(nums[i] < nums[i - 1]) swap(nums, i, i - 1);
            } else {
    
    
                // 这里应该是谷

                // 如果不是谷
                if(nums[i] > nums[i - 1]) swap(nums, i, i - 1);
            }
        }
    }

    // 交换
    public void swap(int[] arr, int x, int y){
    
    
        arr[x] = arr[x] ^ arr[y];
        arr[y] = arr[x] ^ arr[y];
        arr[x] = arr[x] ^ arr[y];
    }
}



Supongo que te gusta

Origin blog.csdn.net/qq_43765535/article/details/112913026
Recomendado
Clasificación