Leetcode PHP题解--D117 599. Minimum Index Sum of Two Lists
D117 599. Minimum Index Sum of Two Lists
题目链接
599. Minimum Index Sum of Two Lists
题目分析
给定两个数组,返回其交集,在交集中返回他们在各自数组的下标之和最小。
思路
因为去找一个元素在不在另一个数组的话,需要逐个比较。因此我们在这里先把两个数组都翻过来,用isset函数去判断是否存在元素。
在循环体外保存最小和,判断两个相同的元素的下标之和是否小于最小值。是则替换,并置空交集数组。否则判断是否相等于当前最小值。相等则追加进交集数组。不相等说明大于最小值,抛弃即可。
最终代码
<?php
class Solution {
/**
* @param String[] $list1
* @param String[] $list2
* @return String[]
*/
function findRestaurant($list1, $list2) {
$list1 = array_flip($list1);
$list2 = array_flip($list2);
$min = 99999999999;
$intersect = [];
foreach($list1 as $name => $v){
if(!isset($list2[$name])){
continue;
}
if($v+$list2[$name] < $min){
$min = $v + $list2[$name];
$intersect = [$name];
}
else if($v+$list2[$name] == $min){
$intersect[] = $name;
}
}
return $intersect;
}
}
若觉得本文章对你有用,欢迎用爱发电资助。
2 Comments
为什么要额外判断下$v+$list2[$name] == $min
因为在有相同最小索引和的情况下,需要并列显示共同感兴趣的餐厅名称。 去掉之后,通过不了的例子是:
每一项的索引和都正好是3,所以需要一起输出。