Вы можете реализовать бинарный поиск в начальных интервалах, чтобы уменьшить временную сложность каждого поиска до log (N). Например, пусть
label = [10,11]
intervals = [(1,3), (5,12), (16,20)]
Поскольку интервалы не перекрываются, нам нужно найти начало первого интервала меньше или равно началу метки.
int val = 10;
int arr[] = {1,5,16};
int low = 0;
int high = arr.length-1;
while(high>=low)
{
int mid = low + (high-low)/2;
if(arr[mid] == val)
return arr[mid];
else if(high == arr.length-1 && arr[mid]<val)
return arr[high];
else if(low == 0 && arr[mid]>val)
return arr[low];
else if(arr[mid]>val)
high = mid-1;
else
low = mid+1;
}
System.out.println(arr[low]);
Здесь результат будет 5. Теперь мы можем легко проверить, принадлежит ли данный ярлык этому интервалу или нет.
Спецификация JSON требует поддержка UTF-8 декодерами. В результате все декодеры JSON могут обработать UTF-8, точно так же как они могут обработать числовые escape-последовательности. Это также имеет место для интерпретаторов JavaScript, что означает, что JSONP обработает закодированный JSON UTF-8 также.
способность к кодерам JSON для использования числовых escape-последовательностей вместо этого просто предлагает Вам больше выбора. Одна причина можно выбрать числовые escape-последовательности, состояла бы в том, если транспортный механизм промежуточный кодер и намеченный декодер не двоично-безопасен.
Другая причина можно хотеть использовать числовые escape-последовательности, должен предотвратить определенные символы, появляющиеся в потоке, такой как <
, &
и "
, который может быть интерпретирован, поскольку HTML упорядочивает, если код JSON помещается, не выходя в HTML, или браузер неправильно интерпретирует его как HTML. Это может быть защитой против инжекции HTML или сценариев перекрестного сайта (примечание: некоторые символы MUST быть оставленным в JSON, включая "
и \
).
Некоторые платформы, включая реализацию PHP JSON, всегда делают числовые escape-последовательности на стороне кодера для любого символа за пределами ASCII. Это предназначается для максимальной совместимости с ограниченными транспортными механизмами и т.п.. Однако это не должно быть интерпретировано как признак, что декодеры JSON имеют проблему с UTF-8.
Так, я предполагаю, что Вы просто могли решить, чтобы использовать как это:
Просто использование UTF-8, если Ваш метод устройства хранения данных или транспорта между кодером и декодером не двоично-безопасен.
Иначе, используйте числовые escape-последовательности.
ASCII больше не находится в нем. Используя средства кодировки UTF-8, что Вы не используете кодирование ASCII. То, для чего необходимо использовать механизм выхода, - то, что говорит RFC:
символы All Unicode могут быть помещены в кавычках за исключением символов, которых нужно оставить: кавычка, реверс solidus и управляющие символы (U+0000 через U+001F)
У меня возникла проблема. Когда я JSON кодирую строку с таким символом, как «é», все браузеры будут возвращать то же «é», за исключением IE, который вернет «\ u00e9».
Затем с PHP json_decode () он потерпит неудачу, если найдет "é", поэтому для Firefox, Opera, Safari и Chrome я должен вызывать utf8_encode () перед json_decode ().
Примечание: в моих тестах IE и Firefox используют собственный объект JSON, другие браузеры используют json2.js.