收藏了。。
以下是引用specilize在2012-6-15 09:21:28的发言:
首先将所有的时间转换为整数,然后使用堆排序排为从小到大,然后确定g_sleep_time所属区间,为两种情况:若在g_tab_time[min]-----g_tab_time[max],则使用折半查找,通过比较绝对值查找最接近时间,若不在区间g_tab_time[min]-----g_tab_time[max],则首先对g_sleep_time进行取模运算g_sleep_time%(g_tab_time[min]+g_tab_time[max]),然后将结果与g_tab_time[min]和g_tab_time[max]进行比较即可,例如g_tab_time[min]=00:03(整数3),g_tab_time[max]=23:45(整数1425),g_sleep_time=23:59(整数1439),g_sleep_time取模后为11,经过比较,与3最接近,代码略。。。。。。。。
首先将所有的时间转换为整数,然后使用堆排序排为从小到大,然后确定g_sleep_time所属区间,为两种情况:若在g_tab_time[min]-----g_tab_time[max],则使用折半查找,通过比较绝对值查找最接近时间,若不在区间g_tab_time[min]-----g_tab_time[max],则首先对g_sleep_time进行取模运算g_sleep_time%(g_tab_time[min]+g_tab_time[max]),然后将结果与g_tab_time[min]和g_tab_time[max]进行比较即可,例如g_tab_time[min]=00:03(整数3),g_tab_time[max]=23:45(整数1425),g_sleep_time=23:59(整数1439),g_sleep_time取模后为11,经过比较,与3最接近,代码略。。。。。。。。
思路不错,但是有几个问题。
1. 字符转化成整数,这个问题不难。
2. 堆排序,这个问题也不难。
3. 如果g_tab_time[min] = 00:05(整数5), g_tab_time[max] = 23:59(整数1439),若现在g_sleep_time = 00:01(整数1),显然,1不在区间内,那用1对5+1439取模,得到1,将1与g_tab_time[min]和g_tab_time[max]进行比较,发现离5最近,这时候真是应该是选00:05么?