Выполните ярлыки как программы

Значение элементов массива должно быть меньше длины массива для этого:

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).

14
задан Lii 23 February 2016 в 09:23
поделиться

6 ответов

В моей системе Vista, вводящей S, не запустит lnk файл, если у меня нет переменной среды набор PATHEXT с .lnk в списке. Когда я делаю. S будет работать в cmd.exe, и я должен сделать.\S в powershell.

9
ответ дан 1 December 2019 в 08:20
поделиться

Я не полагаю, что Вы можете. Вы могли бы быть более обеспеченными искажающими наиболее часто используемыми командами в сценарии, который Вы называете из своего сценария профиля.

Пример -

Псевдоним Набора np c:\windows\notepad.exe

Затем Вы имеете свое короткое, легко typeable имя в наличии из командной строки.

2
ответ дан 1 December 2019 в 08:20
поделиться

После добавления ;.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 }
5
ответ дан 1 December 2019 в 08:20
поделиться

Можно также вызвать ярлык при помощи "вызывать-объекта" cmdlet. Так, например, если Вы хотели запустить "Интернет explorer.lnk", можно ввести следующую команду:

invoke-item 'Internet Explorer.lnk'

Или Вы могли также использовать псевдоним

ii 'internet explorer.lnk'

, Другая прохладная вещь состоит в том, что Вы могли сделать "вызывать-объект t.txt", и он автоматически откроет то, чем обработчиком по умолчанию для *.txt файлов были, такие как блокнот.

Примечание , Если Вы хотите выполнить приложение, app.exe, в текущем каталоге, необходимо на самом деле указать путь, относительный или абсолютный, для выполнения. ".\app.exe" - то, что необходимо было бы ввести для выполнения приложения.

15
ответ дан 1 December 2019 в 08:20
поделиться

Для одного ярлык не является "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
2
ответ дан 1 December 2019 в 08:20
поделиться

Можно всегда использовать заполнение клавишей Tab, чтобы ввести "s [ВКЛАДКА]" и нажать ENTER, и это выполнит его.

0
ответ дан 1 December 2019 в 08:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: