- 平時(shí)是怎么學(xué)習(xí)前端的
- 說(shuō)一下快排的思路
這個(gè)已經(jīng)準(zhǔn)備好了,所以說(shuō)得很快 - 股票交易題
給定一個(gè)數(shù)組嫌术,它的第 i 個(gè)元素是一支給定股票第 i 天的價(jià)格刀荒。
如果你最多只允許完成一筆交易(即買(mǎi)入和賣(mài)出一支股票一次)弯洗,設(shè)計(jì)一個(gè)算法來(lái)計(jì)算你所能獲取的最大利潤(rùn)谤辜。
注意:你不能在買(mǎi)入股票前賣(mài)出股票岳掐。
輸入: [7,1,5,3,6,4]
輸出: 5
解釋: 在第 2 天(股票價(jià)格 = 1)的時(shí)候買(mǎi)入伪嫁,在第 5 天(股票價(jià)格 = 6)的時(shí)候賣(mài)出顽决,最大利潤(rùn) = 6-1 = 5 短条。
注意利潤(rùn)不能是 7-1 = 6, 因?yàn)橘u(mài)出價(jià)格需要大于買(mǎi)入價(jià)格;同時(shí)才菠,你不能在買(mǎi)入前賣(mài)出股票
#include <iostream>
#include <limits>
using namespace std;
int main() {
int prev = INT_MAX;
int maxVal = INT_MIN;
int arr[6] = {7,1,5,3,6,4};
prev = arr[0];
for(int i=1; i<6;i++){
if(arr[i] - prev > maxVal) maxVal = arr[i] - prev;
if(arr[i] < prev) prev = arr[i];
}
cout >> maxVal>> endl;
return 0;
}
- js的基礎(chǔ)數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型
基礎(chǔ)數(shù)據(jù)類(lèi)型包括String, Number, Boolean, Symbol, Null, Undefined
茸时。引用數(shù)據(jù)類(lèi)型為
Object
。 - js基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型的區(qū)別是什么
基本數(shù)據(jù)類(lèi)型是按值訪問(wèn)赋访,引用數(shù)據(jù)類(lèi)型是按引用訪問(wèn)可都。 - 基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型賦值時(shí)的區(qū)別缓待,如下面代碼中
b
會(huì)等于2
,obj2.n
會(huì)等于3
嗎渠牲?
var a = 1;
var b = a;
a = 2;
b === 2;
var obj1 = {
n: 1
}
var obj2 = obj1;
obj1.n = 3;
obj2.n === 3;
基本數(shù)據(jù)類(lèi)型賦值后旋炒,a發(fā)生改變,不會(huì)影響b签杈。引用數(shù)據(jù)類(lèi)型賦值后瘫镇,引用中的基本數(shù)據(jù)類(lèi)型賦值不改變,引用中的引用數(shù)據(jù)類(lèi)型賦值會(huì)改變答姥。b
不會(huì)等于2
铣除,b
仍然為1
。obj2.n
不會(huì)等于3
鹦付。
如何對(duì)一個(gè)Object進(jìn)行深拷貝
第一種方法是直接使用JSON.stringify
把對(duì)象轉(zhuǎn)換為字符串后尚粘,再用JSON.parse
把字符串轉(zhuǎn)換成對(duì)象。第二種方法是寫(xiě)一個(gè)深拷貝的函數(shù)敲长,創(chuàng)建一個(gè)空對(duì)象郎嫁,遍歷要拷貝對(duì)象中的key
,如果key
對(duì)應(yīng)的value
類(lèi)型不是Object
祈噪,那么直接賦值泽铛,如果是Object
,那么給當(dāng)前key
的value
遞歸調(diào)用深拷貝函數(shù)辑鲤,將返回的值賦值厚宰。假設(shè)這有一個(gè)可以生成promise的函數(shù),但是當(dāng)前的環(huán)境只能允許每次只處理一個(gè)promise請(qǐng)求遂填,等請(qǐng)求處理完后才能處理下一個(gè)請(qǐng)求,如果在處理請(qǐng)求的過(guò)程中澈蝙,又收到了新的請(qǐng)求吓坚,直接忽略。你需要完成
singlePipe
函數(shù)實(shí)現(xiàn)這個(gè)功能灯荧。
const singlePipe = function(promiseFunc) {
// TODO
};
// 測(cè)試
const promiseFunc = function (data) {
return new Promise((resolve) => {
setTimeout(() => resolve(data), 1000);
});
};
const request = singlePipe(promiseFunc);
request(1).then(data => console.log(data)); // 1
request(2).then(data => console.log(data)); // 無(wú)反應(yīng)
setTimeout(() => {
request(3).then(data => console.log(data)); // 3
}, 1000);
用一個(gè)變量handler來(lái)記錄當(dāng)前環(huán)境中是否有請(qǐng)求正在處理礁击,如果沒(méi)有的話,那么處理這個(gè)請(qǐng)求逗载,把handler設(shè)為true哆窿,并resolve這個(gè)請(qǐng)求,將這個(gè)請(qǐng)求得到的結(jié)果在then中返回厉斟,并把handler重新設(shè)為false挚躯。
const singlePipe = function(promiseFunc) {
// TODO
let handler = false;
return function(data){
return new Promise((resolve, reject)=>{
if(!handler){
handler = true;
resolve(promiseFunc(data).then((res)=>{
handler = false;
return res;
}));
}
})
}
};
- 反問(wèn)環(huán)節(jié)