leetcode 164の最大距離(O(N)時間と空間の複雑さを満たしていません)

ここに画像を挿入説明
クイックソートに基づいて、

#include<stdio.h>
#include<stdlib.h>
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);

	}

	
}

ここに画像を挿入説明

公開された212元の記事 ウォン称賛32 ビュー60000 +

おすすめ

転載: blog.csdn.net/qq_42664961/article/details/104348684