Étant donné une liste d'entiers et un nombre cible, la tâche consiste à trouver le nombre dans la liste qui est le plus proche de la cible. Ce problème peut être résolu en utilisant différentes approches :
Si l'ordre des éléments dans la liste n'est pas garanti, la fonction min() avec le paramètre key peut être utilisée. Cette méthode trouve la distance minimale entre chaque élément et la cible et renvoie l'élément avec la distance minimale :
def takeClosest(myList, myNumber): return min(myList, key=lambda x: abs(x - myNumber))
Si la liste est connue de être trié, une recherche binaire peut être appliquée pour trouver plus efficacement le nombre le plus proche en un temps O(log n) :
def takeClosest(myList, myNumber): low = 0 high = len(myList) - 1 while low <= high: mid = (low + high) // 2 if myList[mid] == myNumber: return myList[mid] elif myList[mid] < myNumber: low = mid + 1 else: high = mid - 1 return min([myList[low], myList[high]], key=lambda x: abs(x - myNumber))
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!