讓函式 ArrayChallenge(arr) 獲取存盤在 arr 中的整數陣列,并確定陣列中的任何兩個數字(不包括第一個元素)是否可以和陣列中的第一個元素相加。例如:如果 arr 是 [7, 3, 5, 2, -4, 8, 11],那么實際上有兩對的和等于數字 7:[5, 2] 和 [-4, 11]。您的程式應該按照第一個數字出現在陣列中的順序回傳所有對,用逗號分隔數字。對應該用空格隔開。所以對于上面的例子,你的程式將回傳:5,2 -4,11
如果沒有兩個數字之和等于陣列中的第一個元素,則回傳 -1
Input: [17, 4, 5, 6, 10, 11, 4, -3, -5, 3, 15, 2, 7]
Output: 6,11 10,7 15,2
Final Output: --6--,--1----1-- --1--0,7 --1----5--,2
Input: [7, 6, 4, 1, 7, -2, 3, 12]
Output: 6,1 4,3
Final Output: --6--,--1-- 4,3
我的方法
function ArrayChallenge(arr) {
var sum = []
for (var i = 0; i < arr.length; i ){
for (var j = i 1; j < arr.length; j ){
if(arr.[i] arr[j]=== )
}
}
// code goes here
return arr;
}
// keep this function call here
console.log(ArrayChallenge(readline()));
你能幫我解決這個問題嗎?
uj5u.com熱心網友回復:
邏輯
- 回圈遍歷陣列。
- 從索引 1 開始到外回圈中的最后一個節點(索引 0 除外)。
- 從內回圈中外回圈旁邊的一個節點開始 Srart。
- 檢查兩個節點的總和。
- 如果 sum 值與第一個索引處的節點相同,則將其推送到所需格式的 sum 陣列。
- 檢查 sum 陣列的長度。如果長度 > 0 連接和陣列并回傳。否則回傳-1
作業代碼
const input = [17, 4, 5, 6, 10, 11, 4, -3, -5, 3, 15, 2, 7];
const input2 = [7, 6, 4, 1, 7, -2, 3, 12];
const input3 = [37, 6, 4, 1, 7, -2, 3, 12];
function ArrayChallenge(arr) {
var sum = []
for (var i = 1; i < arr.length; i ) {
for (var j = i 1; j < arr.length; j ) {
if (arr[i] arr[j] === arr[0]) {
sum.push([arr[i], arr[j]].join());
}
}
}
return sum.length > 0 ? sum.join(" ") : -1;
}
console.log(ArrayChallenge(input));
console.log(ArrayChallenge(input2));
console.log(ArrayChallenge(input3));
uj5u.com熱心網友回復:
您的方法使用 O(n^2) 級復雜度。如果您愿意,可以使用 O(n) 來解決這個問題,因此可以在空間復雜度上犧牲一點。
你可以做的是:
- 制作一個空物體。
- 將陣列的所有值(不是第 0 個元素)作為鍵存盤在物件中,并將其值添加為 true。
- 回圈陣列(從第一個索引)。取值并從第 0 個元素中減去它。從物件中找到這個減去的值,如果它沒有回傳 undefined ,做一個對并保存它。
這種方法的一個缺點是,您會在結果中發現重復的條目。該方法使用 O(n) 時間復雜度和 O(n) 空間復雜度
function ArrayChallange(arr) {
let numObj = {}
let i = 1
let result = []
let tempVal
// Pushing all elements of arr (from index 1) inside numObj
while(i<arr.length){
numObj[arr[i]] = true
}
i = 1
// Looping the array to find pairs
while(i < arr.length){
tempVal = numObj[Math.abs(arr[0] - arr[i])]
if(tempVal){
result.push(arr[i].toString() "," tempVal.toString())
}
}
if(result.length !== 0)
return result.join(" ")
else
return -1
}
uj5u.com熱心網友回復:
您可以使用reducer后跟forEach回圈,以便將這些對推送到一個空陣列,然后在最后加入它們。
const ArrayChallenge = (nums) => {
const pairs = []
// Get the first and remove it from the array
const first = nums.splice(0, 1)[0]
nums.reduce((all, curr) => {
all.forEach((a) => {
// Check if we have a match
if (curr a === first) {
// check if it's already in the array
// we don't want duplicates
if (pairs.indexOf(`${a},${curr}`) === -1 && pairs.indexOf(`${curr},${a}`) === -1) {
// push the pair to the array separated by a space
pairs.push(`${curr},${a}`)
}
}
})
return all
}, nums) // we pass in nums as the starting point
// If there are no pairs then return -1
if (pairs.length === 0) {
return -1
} else {
// Join the pairs together with a space
const result = pairs.join(' ')
// Replace each digit (\d) with hyphens before and after
const parsed = result.replace(/(\d)/g, '--$1--')
return parsed
}
}
const result1 = ArrayChallenge([17, 4, 5, 6, 10, 11, 4, -3, -5, 3, 15, 2, 7])
console.log(result1)
const result2 = ArrayChallenge([7, 6, 4, 1, 7, -2, 3, 12])
console.log(result2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/402034.html
標籤:javascript 数组
上一篇:在HTML中隱藏和顯示Div標簽
