Уведомьте, что разработчик “НЕ ИСПОЛЬЗУЕТ” метод

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

Например , давайте определим min_arr и max_arr, причем данный массив будет arr. Индекс i в min_arr будет минимальным элементом в arr для всех индексов <= i (слева от i и включает i). Индекс i в max_arr будет максимальным элементом в arr для всех индексов >= i (справа и в том числе i). Затем вы можете найти максимальную разницу между соответствующими элементами в max_arr и `min_arr ':

def max_profit(arr)
   min_arr = []
   min_el = arr.first
   arr.each do |el|
       if el < min_el
           min_el = el
           min_arr << min_el
       else
           min_arr << min_el
       end
   end

   max_arr = []
   max_el = arr.last
   arr.reverse.each do |el|
       if el > max_el
           max_el = el
           max_arr.unshift(max_el)
       else
           max_arr.unshift(max_el)
       end

   end

   max_difference = max_arr.first - min_arr.first
   1.upto(arr.length-1) do |i|
        max_difference = max_arr[i] - min_arr[i] if max_difference < max_arr[i] - min_arr[i]  
   end

   return max_difference 
end

Это должно выполняться в O (n) времени, но я считаю, что он использует много пространство.

26
задан Community 23 May 2017 в 11:54
поделиться

12 ответов

Если класс [Serialisable] (т.е. он может быть скопирован вокруг места по мере необходимости), param-меньше конструктора необходимо для десериализации.

я предполагаю, что Вы хотите вынудить доступ своего кода передать значения по умолчанию для Ваших свойств параметризованному конструктору.

В основном Вы говорите, что для XmlSerializer нормально делать копию и затем устанавливать свойства, но Вы не хотите свой собственный код к.

В некоторой степени я думаю, что это сверхразрабатывает.

Просто добавляют XML-комментарии, которые детализируют, каким свойствам нужна инициализация (и что к).

не используют [Obsolete] , потому что это не. Зарезервируйте это для по-настоящему устаревших методов.

14
ответ дан Willem Van Onsem 28 November 2019 в 07:25
поделиться

Можно использовать:

[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]

так, чтобы это не обнаруживалось в Intellisence. Если потребитель все еще хочет использовать его, они могут, но это не будет столь же поддающимся обнаружению.

точка Keiths о по разработке все еще стоит все же.

24
ответ дан Willem Van Onsem 28 November 2019 в 07:25
поделиться

Я прочитал заголовок и сразу думал "устаревший атрибут". Как насчет

    /// <summary>
    /// do not use
    /// </summary>
    /// <param name="item">don't pass it anything -- you shouldn't use it.</param>
    /// <returns>nothing - you shouldn't use it</returns>
    public bool Include(T item) { 
    ....
2
ответ дан hometoast 28 November 2019 в 07:25
поделиться

Я на самом деле был бы склонен не согласиться со всеми, которые защищают использование ObsoleteAttribute , как в документации MSDN говорится что:

отмечание элемента как устаревший сообщает пользователям, что элемент будет удален в будущих версиях продукта.

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

я на самом деле использовал Keith метод просто замечания, что конструктор используется для сериализации в документации XML так, чтобы это обнаружилось в Intellisense.

2
ответ дан Community 28 November 2019 в 07:25
поделиться

Вы могли создать свое собственное Attribute производный класс, сказать NonCallableAttribute для квалификации методов, и затем добавить к анализу кода сборки/CI определяют задачу для проверки, чтобы контролировать, если какой-либо код использует те методы.

, По-моему, Вы действительно не можете вынудить разработчиков не использовать метод, но Вы могли обнаружить, когда кто-то нарушил правило как можно скорее, и зафиксируйте его.

1
ответ дан Willem Van Onsem 28 November 2019 в 07:25
поделиться

Ничего себе, та проблема прослушивает меня также.

Вам также нужны конструкторы по умолчанию для NHibernate, но я хочу вынудить людей НЕ использовать инициализаторы объекта C# 3.0 так, чтобы классы прошли код конструктора.

0
ответ дан Jon Limjap 28 November 2019 в 07:25
поделиться
throw new ISaidDoNotUseException();
0
ответ дан FlySwat 28 November 2019 в 07:25
поделиться

Разделите свой сериализуемый объект от Вашего объекта области.

0
ответ дан 28 November 2019 в 07:25
поделиться

То, что Вы ищете, ObsoleteAttribute класс:

using System;

public sealed class App {
   static void Main() {      
      // The line below causes the compiler to issue a warning:
      // 'App.SomeDeprecatedMethod()' is obsolete: 'Do not call this method.'
      SomeDeprecatedMethod();
   }

   // The method below is marked with the ObsoleteAttribute. 
   // Any code that attempts to call this method will get a warning.
   [Obsolete("Do not call this method.")]
   private static void SomeDeprecatedMethod() { }
}
0
ответ дан Willem Van Onsem 28 November 2019 в 07:25
поделиться

ObsoleteAttribute будет, вероятно, работать в Вашей ситуации - можно даже заставить сборку повреждаться, если тот метод используется.

, Так как устаревшие предупреждения происходят во время компиляции, и так как отражение, необходимое для сериализации, происходит во времени выполнения, отмечание того устаревшего метода не повредит сериализацию, но предупредит разработчиков, что метод не должен там использоваться.

0
ответ дан Willem Van Onsem 28 November 2019 в 07:25
поделиться

Я использую ObsoleteAttribute .

, Но также и у Вас могут быть некоторые комментарии, конечно.

И наконец удаляют его полностью, если Вы можете (не должны поддерживать совместимость с чем-то старым). Это - лучший способ.

-1
ответ дан Willem Van Onsem 28 November 2019 в 07:25
поделиться

Да существует.

я записал это сообщение в блоге об этом Работа с разработчиком .

И вот код:


public class MyClass
{
  [Obsolete("reason", true)]
  public MyClass()
  {
    // required for xml serialization
  }
}
-1
ответ дан Willem Van Onsem 28 November 2019 в 07:25
поделиться
Другие вопросы по тегам:

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