2 0 1 9 - 4 -25 星 期四 开 始 吧
上 一篇 链 接 Leetcode基础刷题之 PHP 解析(342,344,349)
题 目 描 述
两个数组相交。这是349题的扩展版,它允许我们返回相同的数字,但是一定得是两边同时都有。比如我把上面的稍微改动一下
题 目 分 析
我的解是先排序,然后定义两个指针对应着数组1和数组2的位置,只要相等直接插入新数组,如果一方大于另一方,另一方自增,反之也是一样的。
/**
* @param Integer[] $nums1
* @param Integer[] $nums2
* @return Integer[]
*/
function intersect($nums1, $nums2) {
$i=0; $j=0;
sort($nums1);
sort($nums2);
$res=[];
while($i<count($nums1) && $j<count($nums2)){
if($nums1[$i]==$nums2[$j]){
array_push($res,$nums1[$i]);
++$i;
++$j;
}else if($nums1[$i]>$nums2[$j]){
++$j;
}else{
++$i;
}
}
return $res;
}
这道题让我们求两数之和,但是不能使用+-运算符。这道题想了几分钟没想出来,后面参考别人的 java 思路,才写的(如果一道题你看了8分钟都没有想法,有两种选择,一个直接当前放弃,记录下,以后再来。另一种看下别人的思路然后再回来自己解)。其实就是用异或算不带进位的和,用与并左移一位来算进位数,然后两者相加。
/**
* @param Integer $a
* @param Integer $b
* @return Integer
*/
function getSum($a, $b) {
return $b==0? $a:$this->getSum($a^$b, ($a&$b)<<1);
}
如果这样看着难受,那用迭代
/**
* @param Integer $a
* @param Integer $b
* @return Integer
*/
function getSum($a, $b) {
while($b){
$res=($a & $b)<<1;
$a=$a ^ $b;
$b =$res;
}
return $a;
}
以上所述就是小编给大家介绍的《Leetcode基础刷题之PHP解析(350,371)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Apache Flink 零基础入门(一):基础概念解析
- Apache Flink 零基础入门(一):基础概念解析
- JStorm 源码解析:基础线程模型
- React Hooks 解析(上):基础
- TypeScript基础入门之模块解析(一)
- TypeScript基础入门之模块解析(二)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。