После того, как это произошло в текущем экзамене по кодированию для инженера-конструктора FB, мне пришлось решить его в спокойной прохладной атмосфере, так что вот мои 2 цента:
var max_profit = 0;
var stockPrices = [23,40,21,67,1,50,22,38,2,62];
var currentBestBuy = 0;
var currentBestSell = 0;
var min = 0;
for(var i = 0;i < (stockPrices.length - 1) ; i++){
if(( stockPrices[i + 1] - stockPrices[currentBestBuy] > max_profit) ){
max_profit = stockPrices[i + 1] - stockPrices[currentBestBuy];
currentBestSell = i + 1;
}
if(stockPrices[i] < stockPrices[currentBestBuy]){
min = i;
}
if( max_profit < stockPrices[i + 1] - stockPrices[min] ){
max_profit = stockPrices[i + 1] - stockPrices[min];
currentBestSell = i + 1;
currentBestBuy = min;
}
}
console.log(currentBestBuy);
console.log(currentBestSell);
console.log(max_profit);
Я рекомендовал бы Scott Hanselman еженедельные статьи исходного кода , он делает точно, что Ваше предложение, которое читается больше исходного кода для поправлений. Это стоит чтения.
Я могу рекомендовать набор загадки Simon Tatham . Это - серия головоломок (минный тральщик, судоку, пятнадцать) доступный для Windows, OS X и Linux (и как апплеты Java). Архитектура довольно проста: существует интерфейс фронтенда с тремя реализациями (один на платформу), внутренний интерфейс с одной реализацией на игру (я дал три примера), и середина конца, который заставляет их говорить вместе, сделайте сериализацию и другой аккуратный материал.
В основном, это - хорошее ООП. Записанный в C. Легко способствовать (я реализовал игры Заполнения и Диапазона), так как это хорошо документируется, и легко читать.
Это зависит от Ваших интересов, но я работал с кодовая база Quake III , и это было довольно правильно написано и хорошо работать с. Это записано в C.
ядро Linux является очень хорошим способом учиться.
я знаю, что может быть трудно погрузиться в из-за мультиархитектурной структуры и большого объема кода, но существует некоторая очень хорошая статья для движения медленно внутри, как этот от Tim Jones .
я изучил много путем рассмотрения определенного предмета, как реализация драйвера FAT и абстракция файловых систем.
Вы найдете много примеров. Но сказали Jim Buck, это зависит от Ваших интересов. Я изучил метрику s - тонна "материала" от источник SharpDevelop .
Если у кого-либо есть копия Чтение кода Diomidis Spinellis, о каких проектах с открытым исходным кодом он пишет там?
<час>@Avinash: Если бы Вы хотите узнать больше о программировании в целом, я рекомендовал бы и Качество Чтения кода и Кода Spinellis. У них есть примеры кода из различных проектов, всего FOSS, я верю, таким образом, можно не только читать о них, но идти и обсуждать версию в книге и последней версии, чтобы считать больше кода от них и учиться.
<час>Относительно небольшой, но достаточно сложный, чтобы иметь возможность Чтобы учиться, мой голос идет на:
Платформа ведения журналов Apache Log4Net .
Ее исходный код легко читается и "кроссплатформенный" [компилируется на: .NET 1.0, 1.1, 2.0 , CF, MONO ...], поэтому полезны для урока "кроссплатформенной" разработки на C # ...
Одно из лучших штук, которые я нашел из чистого и лаконичного исходного кода, является источником jQuery . Независимо от того, нравится ли вам JavaScript или нет, это делает отличный случай против адвокатов «Кодекса, являющегося документацией» .
Есть много комментариев, но это не произведение ASCII, и вы можете видеть чистые рассуждения - комментарии заставляют вас точно знать, что пытается быть достигнутым.
Пример ( полный источник ):
(function(){
var
// Will speed up references to window, and allows munging its name.
window = this,
// Will speed up references to undefined, and allows munging its name.
undefined,
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
// Map over the $ in case of overwrite
_$ = window.$,
jQuery = window.jQuery = window.$ = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
},
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
// Is it a simple selector
isSimple = /^.[^:#\[\.,]*$/;
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
// Make sure that a selection was provided
selector = selector || document;
// Handle $(DOMElement)
if ( selector.nodeType ) {
this[0] = selector;
this.length = 1;
this.context = selector;
return this;
}
// Handle HTML strings
if ( typeof selector === "string" ) {
// Are we dealing with HTML string or an ID?
var match = quickExpr.exec( selector );
// Verify a match, and that no context was specified for #id
if ( match && (match[1] || !context) ) {
// HANDLE: $(html) -> $(array)
if ( match[1] )
selector = jQuery.clean( [ match[1] ], context );
// HANDLE: $("#id")
else {
var elem = document.getElementById( match[3] );
// Handle the case where IE and Opera return items
// by name instead of ID
if ( elem && elem.id != match[3] )
return jQuery().find( selector );
...