leetcode 164. 最大间距(不符合O(n)的时间空间复杂度)

leetcode 164. 最大间距(不符合O(n)的时间空间复杂度)_第1张图片
基于快速排序

#include
#include
int maximumGap(int* nums, int numsSize);
void quicksort(int *nums, int i, int j);
void main(){
	int nums[2] = {100000000,1 };
	int max = maximumGap(nums, 2);
	printf("%d", max);
	system("pause");
}
int maximumGap(int* nums, int numsSize){
	//先排序 判断相邻两个数之间的间隔
	//再次使用快速排序
	if (numsSize == 0){
		return 0;
	}
	quicksort(nums, 0, numsSize - 1);
	if (numsSize == 1){
		return 0;
	}
	
	for (int m = 0; m<numsSize; m++){
		printf("-----------%d\n", nums[m]);
	}
	int left = numsSize - 1;
	int right = numsSize - 2;
	int max = nums[left] - nums[right];
	
	for (int i = numsSize -1; i>=1; i--){
		max = (max > (nums[i] - nums[i - 1])) ? max : (nums[i] - nums[i - 1]);
	
	}
	if (max<2){
		return 0;
	}
	return max;
}
//使用快速排序
void quicksort(int *nums, int i, int j){
	
	//需要两个指针和一个辅助空进
	int begin, end;
	int tmp;
	begin = i;
	end = j;
	tmp = nums[begin];
	int mid = 0;
	if(begin < end){
		while (begin < end){
			while (nums[end] >= tmp && begin < end){
				end--;
			}
			nums[begin] = nums[end];

			while (nums[begin] <= tmp && begin < end){
				begin++;
			}
			nums[end] = nums[begin];

			for (int m = 0; m < 4; m++){
				printf("llll-----------%d\n", nums[m]);
			}
			printf("\n");
		}
		printf("huanxhun");
		nums[begin] = tmp;
		//	mid = (i + j) / 2; 错误之处
		mid = begin;
		quicksort(nums, i, mid - 1);
		quicksort(nums, mid + 1, j);

	}

	
}

leetcode 164. 最大间距(不符合O(n)的时间空间复杂度)_第2张图片

你可能感兴趣的:(数据结构)