Un voyage a la forme [lieu de départ du voyage, lieu de destination du voyage]. Vous recevez les voyages dans un ordre aléatoire. Ecrivez une fonction Javascript pour savoir quel est le point de départ du voyage. L'utilisateur peut également saisir les lieux visités.
Exemple 1:
exampleTrips: = [[A, B], [B, C], [C, D]]
Le trajet dans cet exemple a commencé à "A".
Exemple 2:
exampleTrips: = [[D, E], [F, D], [E, X]]
Le voyage dans cet exemple a commencé à "F".
Définition d'un tableau Divisez-le en deux tableaux, a1 et a2 trouver la différence b / w a1 et a2 renvoie l'élément restant de a1
var a = [ ['a', 'b'], ['b', 'c'], ['c', 'd'], ['e', 'a'] ];
var a1 = a.map(function(tuple) {
return tuple[0];
});
var a2 = a.map(function(tuple) {
return tuple[1];
});
function difference(a1, a2) {
var result = [];
for (var i = 0; i < a1.length; i++) {
if (a2.indexOf(a1[i]) === -1) {
result.push(a1[i]);
}
}
return result;
}
console.log(difference(a1, a2));
3 Réponses :
Commencez par obtenir le début et la fin (uniquement les éléments non répétés), puis déterminez lequel est le premier élément du tableau:
const a = [['a','b'], ['b','c'],['d','a']]; const startEnd = a.reduce((acc, curr) => acc.concat(curr)).filter((e, i, arr) => arr.indexOf(e) == arr.lastIndexOf(e)); const res = a.findIndex(([e]) => startEnd.includes(e)); console.log(res);
Vous savez quel est le début et la fin car la première entrée de la paire est un point de départ. Donc, dans le cas d'utilisation que vous avez utilisé, la réponse serait «d». Je suppose qu'une fois que vous avez le début et la fin, vous pouvez revérifier pour voir lequel des deux est en position de «départ».
Je vois @SimpleOne. Belle technique. J'ajouterai cela à ma réponse.
Correction de @SimpleOne - à quoi ça ressemble?
J'ai une question d'entrevue similaire, voici ma réponse:
const exampleTrips = [ ['Cologne','Berlin'],['Munich','Cologne'],['YourPlace','Munich'] ]
const exampleTrips2 = [ ['A', 'B'], ['B','C'], ['C','D'] ]
const trips = (array) => {
if(!array.length) {
return 'Please input a trip'
}
const start = []
const end = []
for(const el of array) {
if(el.length === 2) {
start.push(el[0])
end.push(el[1])
} else {
return 'Please input a valid start and end trip'
}
}
const place = start.filter((element) => end.indexOf(element) === -1)
console.log(place[0])
return place[0]
}
trips(exampleTrips)
trips(exampleTrips2)
La solution dans la question est O (n 2 )
Vous pouvez le faire en O (n) avec une carte de hachage
const findStartingPoint = (trips) => {
// create a hash map of starting points from all trips
const tripStarts = trips.reduce((acc, trip) => {
acc[trip[0]] = false
return acc
}, {})
// get ending points from all trips
const tripEnds = trips.map(trip => trip[1])
tripEnds.forEach(end => {
tripStarts[end] = true
});
// get tripStarts - tripEnds
// I'm assuming a journey means continuous trips. This means Every start
// except for the journey start should be in trip ends
let start
Object.keys(tripStarts).forEach(tripKey => {
if(tripStarts[tripKey] === false) {
start = tripKey
}
})
return start ? start : 'You can start your trip anywhere'
}
console.log(findStartingPoint([['Cologne','Berlin'],['Munich','Cologne'],['YourPlace','Munich']]))
console.log(findStartingPoint(
[
['Cologne','Berlin'],
['Munich','Cologne'],
['YourPlace','Munich']
]) === 'YourPlace')
console.log(findStartingPoint(
[ ['A','B'], ['B','C'], ['C','D'] ]) === 'A')
console.log(findStartingPoint(
[ ['D','E'], ['F','D'], ['E','X'] ]) === 'F')
console.log(findStartingPoint(
[ ['A','B'], ['B','C'], ['C','D'], ['D', 'A']]) === 'You can start your trip anywhere')
Mais vous ne pouvez pas dire si un point est le début ou la fin - il y en a un de chacun et deux du reste. Vous ne pouvez renvoyer que les deux éléments non répétés.
[['a', 'b'], ['b', 'a']]pourrait être une entrée? Pouvez-vous rencontrer le même point plusieurs fois?Je n'ai besoin que du début signifie un seul élément
Qu'avez-vous fait jusqu'à présent ? Même pseudo code
@adiga j'ai essayé code
codevar a = [['a', 'b'], ['b', 'c'], ['c', 'd'], ['e' , 'une']]; var a1 = a.map (function (tuple) {return tuple [0];}); var a2 = a.map (function (tuple) {return tuple [1];}); console.log (a1, a2); console.log (différence (a1, a2)); différence de fonction (a1, a2) {var result = []; pour (var i = 0; iCeci est illisible dans le commentaire. Veuillez modifier votre question
Veuillez ajouter tout le code pertinent à la question de la prochaine fois pour créer un exemple reproductible minimal . (Vous pouvez également lire Comment créer un extrait de pile exécutable? )
@SyedSaqib - Alors, quel est le problème avec votre réponse? Cela semble être OK (une des nombreuses façons de le faire). Cherchez-vous quelque chose de plus efficace?
@SimpleOne Oui bien sûr