以下是需求詳情:
time = ["09-13", "12-14"]
getResult(time) = false
第一場演出從上午 9 點到下午 1 點開始,第二場從中午 12 點開始,因此您將無法完整觀看每場演出。
time = ["07-09", "10-12", "15-19"]
getResult(time) = true
但我無法得到結果。我正在尋找挑戰來完成它。有人幫我嗎?
這是我的嘗試:
const getResult = (time) => {
const nums = [];
let pre = 0;
time.map((item,index) => {
item.split('-').map((v,i) => {
nums.push( v);//converting as number
});
});
const result = nums.map((v,i) => {
if(!i) return;
console.log(v-pre)//but logically this is not works
pre = v;
})
}
//time = ["09-13", "12-14"]; //false
time = ["07-09", "10-12", "15-19"] //true
getResult(time); //should be false
提前致謝。
uj5u.com熱心網友回復:
將每個范圍轉換為范圍內的每個小時,然后:
- 如果陣列中已經存在小時,則回傳 false
- 否則,推送到陣列
const getResult = (ranges) => {
const filled = [];
for (const range of ranges) {
let [start, end] = range.split('-').map(Number);
while (end !== start) { // Exclusive
if (filled.includes(start)) return false;
filled.push(start);
start ;
}
}
return true;
};
console.log(getResult(["09-13", "12-14"]));
console.log(getResult(["07-09", "10-12", "15-19"]));
您當前的方法似乎沒有將范圍轉換為各自的小時數或識別重疊的概念。
uj5u.com熱心網友回復:
- 根據開始時間對時間段進行排序。
- 回圈遍歷排序陣列中的所有時隙,如果任何時候一個時隙的開頭小于前一個時隙的結尾,則回傳
false。 - 如果整個回圈用盡回傳
true。
function getResult(time) {
const sortedTime = [...time].sort((a, b) => {
const slotA = Number(a.split("-")[0]);
const slotB = Number(b.split("-")[0]);
return slotA - slotB;
});
console.log("Sorted Time Slots", sortedTime);
let last;
for (let t of sortedTime) {
const [start, end] = t.split("-").map(Number);
if (last && start < last) {
return false;
}
last = end;
}
return true;
}
console.log(getResult(["12-14", "09-13"]));
console.log(getResult(["10-12", "07-09", "15-19"]));
uj5u.com熱心網友回復:
一旦我們在它們的 's>=上拆分值,您的格式對于直接比較已經很有用了。-所以我們可以簡單地對值進行排序,然后檢查在第一個之后的每種情況下,開始部分(在 之前-)至少與-前一個值的結束部分(在 之后)一樣大。它可能看起來像這樣:
const feasible = (times) => [... times]
.sort ()
.every ((t, i, a) => i == 0 || t .split ('-') [0] >= a [i - 1] .split ('-') [1])
console .log (feasible (["09-13", "12-14"]))
console .log (feasible (["07-09", "10-12", "15-19"]))
我們使用i == 0 ||來簡單地避免測驗排序值中的第一個。
這涉及將每個值拆分兩次(嗯,除了第一個值。)如果這種低效率困擾您,我們可以通過拆分它們并保存結果來解決它(使用更多記憶體;總是需要權衡!):
const feasible = (times) => [... times]
.sort ()
.map (s => s .split ('-'))
.every ((t, i, a) => i == 0 || t [0] >= a [i - 1] [1])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473543.html
標籤:javascript 数组 算法
