LeetCode-1053-交换一次的先前排列-C语言

    xiaoxiao2025-02-27  45

    /* * 算法思想: * 从后往前遍历数组中元素,当遍历到i元素时,从后往前在len-1->i+1范围内查找是否有元素小于arr[i]并且找出最大的一个,记下其index; * 如上说法,寻找到后交换index与i元素后推出即可。 * */ void swap(int *a, int *b){ int c = *a; *a = *b; *b = c; } int find_small(int *arr, int len, int index, int val){ int i; int max = -1; int max_index = -1; for(i=len-1; i>index; i--){ if(arr[i]<val && arr[i]>max){ max = arr[i]; max_index = i; } } return max_index; } int* prevPermOpt1(int* arr, int len, int* returnSize){ int i, j; int tmp; for(i=len-1; i>=0; i--){ tmp = find_small(arr, len, i, arr[i]); if(tmp != -1){ swap(&arr[i], &arr[tmp]); break; } } *returnSize = len; return arr; }
    最新回复(0)