Значение элементов массива должно быть меньше длины массива для этого:
public void findCounts(int[] arr, int n) {
int i = 0;
while (i < n) {
if (arr[i] <= 0) {
i++;
continue;
}
int elementIndex = arr[i] - 1;
if (arr[elementIndex] > 0) {
arr[i] = arr[elementIndex];
arr[elementIndex] = -1;
}
else {
arr[elementIndex]--;
arr[i] = 0;
i++;
}
}
Console.WriteLine("Below are counts of all elements");
for (int j = 0; j < n; j++) {
Console.WriteLine(j + 1 + "->" + Math.Abs(arr[j]));
}
}
Сложность времени будет O(N)
, а сложность пространства будет O(1)
.
В моей системе Vista, вводящей S, не запустит lnk файл, если у меня нет переменной среды набор PATHEXT с .lnk в списке. Когда я делаю. S будет работать в cmd.exe, и я должен сделать.\S в powershell.
Я не полагаю, что Вы можете. Вы могли бы быть более обеспеченными искажающими наиболее часто используемыми командами в сценарии, который Вы называете из своего сценария профиля.
Пример -
Псевдоним Набора np c:\windows\notepad.exe
Затем Вы имеете свое короткое, легко typeable имя в наличии из командной строки.
После добавления ;.LNK
в конец моего PATHEXT
переменная среды, я могу теперь выполнить ярлыки даже без предыдущего ./
нотация. (Спасибо bruceatk!)
Я был также вдохновлен предложением Steven создать немного сценария, который автоматически искажает все ярлыки в моем PATH
(даже при том, что я планирую придерживаться простого решения ;).
$env:path.Split( ';' ) |
Get-ChildItem -filter *.lnk |
select @{ Name='Path'; Expression={ $_.FullName } },
@{ Name='Name'; Expression={ [IO.Path]::GetFileNameWithoutExtension( $_.Name ) } } |
where { -not (Get-Alias $_.Name -ea 0) } |
foreach { Set-Alias $_.Name $_.Path }
Можно также вызвать ярлык при помощи "вызывать-объекта" cmdlet. Так, например, если Вы хотели запустить "Интернет explorer.lnk", можно ввести следующую команду:
invoke-item 'Internet Explorer.lnk'
Или Вы могли также использовать псевдоним
ii 'internet explorer.lnk'
, Другая прохладная вещь состоит в том, что Вы могли сделать "вызывать-объект t.txt", и он автоматически откроет то, чем обработчиком по умолчанию для *.txt файлов были, такие как блокнот.
Примечание , Если Вы хотите выполнить приложение, app.exe, в текущем каталоге, необходимо на самом деле указать путь, относительный или абсолютный, для выполнения. ".\app.exe" - то, что необходимо было бы ввести для выполнения приложения.
Для одного ярлык не является "s", это - "s.lnk". Например, Вы не можете открыться, текстовый файл (скажите с блокнотом) путем ввода "t", когда имя является "t.txt" :) , Technet заявляет
, переменная среды PATHEXT определяет список расширений файла, проверенных Windows NT при поиске исполняемого файла. Значение по умолчанию PATHEXT является.COM;.EXE;.BAT;.CMD
Вы можете точечный источник, как описано другими здесь, или Вы могли также использовать символ вызова "&";. это означает, что PS рассматривает Вашу строку как что-то, чтобы выполниться, а не просто написать сообщение. Это могло бы быть более важно в сценарии все же.
я добавил бы, что необходимо передать любые параметры ЗА ПРЕДЕЛАМИ кавычек (этот укусил меня прежде), отмечают, что "-r" не находится в заключенной в кавычки строке, только exe.
& "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe" -r | out-null
Можно всегда использовать заполнение клавишей Tab, чтобы ввести "s [ВКЛАДКА]" и нажать ENTER, и это выполнит его.