static void findmaxprofit(int[] stockvalues){
int buy=0,sell=0,buyingpoint=0,sellingpoint=0,profit=0,currentprofit=0;
int finalbuy=0,finalsell=0;
if(stockvalues.length!=0){
buy=stockvalues[0];
}
for(int i=1;i<stockvalues.length;i++){
if(stockvalues[i]<buy&&i!=stockvalues.length-1){
buy=stockvalues[i];
buyingpoint=i;
}
else if(stockvalues[i]>buy){
sell=stockvalues[i];
sellingpoint=i;
}
currentprofit=sell-buy;
if(profit<currentprofit&&sellingpoint>buyingpoint){
finalbuy=buy;
finalsell=sell;
profit=currentprofit;
}
}
if(profit>0)
System.out.println("Buy shares at "+finalbuy+" INR and Sell Shares "+finalsell+" INR and Profit of "+profit+" INR");
else
System.out.println("Don't do Share transacations today");
}
@Keith
Это - распространенное заблуждение: Табличные переменные не обязательно хранятся в памяти. На самом деле SQL Server решает, сохранить ли переменную в памяти или проливать его к TempDB. Нет никакого надежного пути (по крайней мере, в SQL Server 2005), чтобы гарантировать, что данные таблицы сохранены в памяти. Для более подробного информационного взгляда здесь
Можно создать табличные переменные (в памяти), и два различных типов временной таблицы:
--visible only to me, in memory (SQL 2000 and above only)
declare @test table (
Field1 int,
Field2 nvarchar(50)
);
--visible only to me, stored in tempDB
create table #test (
Field1 int,
Field2 nvarchar(50)
)
--visible to everyone, stored in tempDB
create table ##test (
Field1 int,
Field2 nvarchar(50)
)
<час> Редактирование:
После обратной связи я думаю, что этому нужно немного разъяснения.
#table
и ##table
всегда будет в TempDB.
@Table
переменные обычно будут в памяти, но, как гарантируют, не будут. SQL решает на основе плана запросов и использует TempDB, если это должно.
Можно объявить "табличную переменную" в SQL Server 2005, как это:
declare @foo table (
Id int,
Name varchar(100)
);
Вы тогда обращаетесь к нему точно так же, как переменная:
select * from @foo f
join bar b on b.Id = f.Id
Никакая потребность отбросить его - это уходит, когда переменная выходит из объема.
Польза сообщение в блоге здесь , но в основном префикс локальные временные таблицы с # и глобальный временный файл с ## - например,
CREATE TABLE #localtemp
Синтаксис, который Вы хотите:
создают таблицу #tablename
, # префикс идентифицирует таблицу как временную таблицу.
Использование CREATE TABLE #tmptablename
префикс хеша/знака фунта
Я понимаю, чего вы пытаетесь достичь . Добро пожаловать в мир разнообразных баз данных!
SQL server 2000 поддерживает временные таблицы, созданные путем добавления префикса # к имени таблицы, что делает ее доступной локально временной таблицей (локальной для сеанса) и предшествующей ## имени таблицы , для глобально доступных временных таблиц, например #MyLocalTable и ## MyGlobalTable соответственно.
Сервер SQL 2005 и более поздних версий поддерживает как временные таблицы (локальные, глобальные), так и табличные переменные - обратите внимание на новые функции для табличных переменных в SQL 2008 и второй версии. ! Разница между временными таблицами и табличными переменными не так велика, но заключается в том, как сервер базы данных обрабатывает их.
Я бы не хотел говорить о более старых версиях SQL-сервера, таких как 7, 6, хотя я работал с ними и все равно откуда я пришел: -)
Принято считать, что переменные таблицы всегда находятся в памяти но это неправильно. В зависимости от использования памяти и объема транзакций сервера базы данных, страницы табличной переменной могут быть экспортированы из памяти и записаны в tempdb, а остальная обработка происходит там (в tempdb).
Обратите внимание, что tempdb - это база данных на экземпляре без постоянных объектов по своей природе, но он отвечает за обработку рабочих нагрузок, связанных с побочными транзакциями, такими как сортировка, и другой обработкой, которая носит временный характер. С другой стороны, Табличные переменные (обычно с меньшими данными) хранятся в памяти (ОЗУ), что ускоряет доступ к ним и, следовательно, уменьшает количество операций ввода-вывода на диск с точки зрения использования диска tempdb при использовании табличных переменных с меньшими данными по сравнению с временными таблицами, которые всегда регистрируются в tempdb.
Табличные переменные не могут быть проиндексированы, в то время как временные таблицы (как локальные, так и глобальные) могут быть индексированы для более быстрой обработки в случае большого количества данных. Таким образом, вы знаете свой выбор в случае более быстрой обработки больших объемов данных временными транзакциями. Также стоит отметить, что транзакции только с табличными переменными не регистрируются и не могут быть отменены, в то время как транзакции, выполненные с временными таблицами, могут быть отменены!
Таким образом, табличные переменные лучше подходят для небольших данных, а временные таблицы лучше для большие данные обрабатываются временно.