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(查找最接近元素等)