1. 程式人生 > >2017.12.24(查找最接近元素等)

2017.12.24(查找最接近元素等)

num 思路 har 分治 == search 習題 ++ 二分查找

2017.12.24

貪心,分治綜合習題(2)

1.查找最接近元素

思路:由題可知,n<=100000,m<=10000,如果每一個m都把這個非降序序列掃一遍的話,那麽時間復雜的將要到達1010那麽多,明顯不合題意;所以,只能用二分查找來優化時間復雜度。

核心代碼:

int left=1,right=n,mid,bz=0;
	while(left<right-1){
		bz=0;
		mid=(left+right)/2;
		if(k==num[mid]){
			printf("%d\n",k);
			bz=1;
			break;
		}
		else if(k>num[mid])
			left=mid;
		else if(k<num[mid])
			right=mid;
	}
	if(num[right]-k<k-num[left]&&bz==0){
		printf("%d\n",num[right]);
	}
	else if(num[right]-k>=k-num[left]&&bz==0){
		printf("%d\n",num[left]);
	}

狀態:AC

2.全排列

思路:這個題目的數據範圍不大,K<=6,所以可以使用沒有任何優化的搜索。題目保證輸入的字符串是已經排好序的,所以可以就可以把輸入的字符串作為一個有序序列來使用。

核心代碼:

void search(int n){
	int i,j;
	if(n==l){
		print();
		return;
	}
	for(i=0;i<l;i++){
		if(book[i]==0){
			book[i]=1;
			answer[n]=letter[i];
			search(n+1);
			book[i]=0;
		}
	}
	return;
}

狀態:AC

2017.12.24(查找最接近元素等)