一些代码片段

timg11111.jpg

给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

class Solution {

    /**
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[]
     */
    function twoSum($nums, $target) {
        $map = [];
        foreach($nums as $k => $v){
            if(isset($map[$target-$v])){
                return [$map[$target-$v],$k];
            }
            $map[$v] = $k;
        }
        return null;
    }
}

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

<?php
class ListNode {
    public $val = 0;
    public $next = null;
    function __construct($val) { 
        $this->val = $val; 
    }
}

class Solution {
    /**
     * @param ListNode $l1
     * @param ListNode $l2
     * @return ListNode
     */
    function addTwoNumbers($l1, $l2) {
        $pre = new ListNode(0);
        $carry = 0;
        $end = $pre;
        while (1){
            if($l1){
                $carry += $l1->val;
                $l1 = $l1->next;
            }
            if($l2){
                $carry += $l2->val;
                $l2 = $l2->next;
            }
            
            if(!$l1 && !$l2 && !$_carry = floor($carry / 10)){
                break;
            }

            $end->val = $carry % 10;
            $carry = $_carry;

            $end->next = new ListNode(0);
            $end = $end->next;
        }
        return $pre;
    }
}

$a = [2,4,3];
$b = [5,6,4];
$l1 = new ListNode(0);
$p_l1 = $l1;
$l2 = new ListNode(0);
$p_l2 = $l2;

for($i=0;$i<3;$i++){
    $p_l1->val = $a[$i];
    $p_l1->next = new ListNode(0);
    $p_l1 = $p_l1->next;

    $p_l2->val = $b[$i];
    $p_l2->next = new ListNode(0);
    $p_l2 = $p_l2->next;
}

$re = (new Solution())->addTwoNumbers($l1,$l2);
var_dump($re);

寻找数组的中心索引

数组中心索引:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。

题解:动态规划,转化为求解 sunLeft * 2 + nums[p] = sumTotal 求解

class Solution {

    /**
     * @param Integer[] $nums
     * @return Integer
     */
    function pivotIndex($nums) {
        $sum = array_sum($nums);
        $left = 0;
        foreach($nums as $k => $v){
            if($left*2 + $v == $sum){
                return $k;
            }
            $left += $v;
        }
        return -1;
    }
}

至少是其他数字两倍的最大数

class Solution {
    /**
     * @param Integer[] $nums
     * @return Integer
     */
    function dominantIndex($nums) {
        $max_index = 0;
        $flag = true;
        foreach($nums as $k =>$v){
            if($k == 0)
                continue;

            if($nums[$max_index] > $v){
                if($flag)
                    $flag = $nums[$max_index] >= 2*$v;
            }else {
                $flag = $v >= 2*$nums[$max_index];
                $max_index = $k;
            }
        }
        if($flag){
            return $max_index;
        }
        return -1;
    }
    
    //直接利用PHP的数组函数
    function dominantIndex($nums) {
        $max = max($nums);
        $index = -1;
        foreach($nums as $k =>$v){
            if($max == $v){
                $index = $k;
            }else if($max < 2*$v){
                return -1;
            }
        }
        return $index;
    }
}

所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!

  Previous post 一些常用正则表达式
Next post   代码片段2

添加新评论

日历
2019 11
    123
45678910
11121314151617
18192021222324
252627282930 

  关于博主

  近期评论

  • 暂无评论

青春就是用来追忆的,当你怀揣着它时,它一文不值,只有将它耗尽后,再回过头看,一切才有了意义,爱过我们的人和伤害过我们的人,都是我们青春存在的意义。

既然活着来到这个世界,就没有打算活着回去。所以,在这有限的时间里,我们应该珍惜生命,珍惜机会,更要珍惜那得之不易的时间。因那滴答做响的时间脚步,一旦走过,再不回头。

青春是一个充满魁力,充满诱惑的时代。好动是青春,好奇是青春,好玩是青春。玩世不恭更是青春,我们的一切切都是青春。

要先打败任何事情得先学会打败自己。

我会把每一次改变当做成长,哪怕是痛也值得。