app.directive("watchAutofill", [
'$timeout',
function ($timeout) {
var INTERVAL_MS = 500;
return {
require: 'ngModel',
link: function (scope, element, attrs, ngModel) {
var timer;
function startTimer() {
timer = $timeout(function () {
var value = element.val();
if (value && ngModel.$viewValue !== value) {
ngModel.$setViewValue(value);
}
startTimer();
}, INTERVAL_MS);
}
scope.$on('$destroy', function () {
$timeout.cancel(timer);
});
startTimer();
}
};
}
]);
Я бы первым делом проверил время выполнения при отсортированном списке (в этом случае при IndexOf используется умный алгоритм поиска, а не обычный перебор). Т. е. добавьте "L2.Sorted := True". Если результат не устроит, то экспериментируйте дальше. Например, попробуйте для L2 вместо TStringList использовать хеш-таблицу TDictionary и метод ContainsKey.
А еще у вас утечки памяти. В случае exit объекты не уничтожаются. Используйте try и finally.
На каждом отрезке от 10*n до 10*n+9 таких чисел ровно 5. Поэтому нам достаточно посчитать число таких полных отрезков, и обработать краевые отрезки. Пусть sumdig(n) - функуция, которая выдаёт остаток от деления суммы цифр n на 2. Тогда: int s0=(B/10-A/10-1)*5; int s1=(10+sumdig(A/10)-A%10)/2; int s2=(2+B%10-sumdig(B/10))/2; return s0+s1+s2;