基础算法-数组

删除排序数组中的重复项
class Solution {

    /**
     * 删除排序数组中的重复项 时间复杂度O(1)
     * @param $nums
     * @return array
     */
    function removeDuplicates(&$nums): array
    {
        $count = count($nums);
        if ($count <= 0) {
            return [];
        }
        $number = $nums[0];
        for ($i=1; $i<$count; $i++) {
            if ($number != $nums[$i]) {
                $number = $nums[$i];
            } else {
                unset($nums[$i]);
            }
        }
        return $nums;
    }
}
$nums = [1,1,2];
print_r((new Solution())->removeDuplicates($nums));
返回两数之和的下标
  • 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标
class Sum
{
    /**
     * 返回两数之和的下标
     * @param array $nums
     * @param int $target
     * @return array|null
     */
    public function twoSum(array $nums, int $target): ?array
    {
        $result = [];
        for ($i = 0; $i < count($nums); $i++) {
            for ($j = $i + 1; $j < count($nums); $j++) {
                if ($nums[$i] + $nums[$j] == $target) {
                    $result[0] = $i;
                    $result[1] = $j;
                    return $result;
                }
            }
        }
        return null;
    }
}
//print_r((new Sum())->twoSum([3,2,4],6));    //返回[1,2]
print_r((new Sum())->twoSum([2,7,11,15],9));    //返回[1,2]
买卖股票的最佳时机
  • 给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。
  • 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

class Prices
{
    //买卖股票的最佳时机
    //给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。
    //设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

    public function maxProfit(array $prices = []):int
    {
        if ($prices == null || count($prices) < 2) {
            return 0;
        }
        $length = count($prices);
        $hold = -$prices[0];
        $noHold = 0;
        for ($i = 1; $i < $length; $i++) {
            //推导公式
            $noHold = max($noHold, $hold + $prices[$i]);
            $hold = max($hold, $noHold - $prices[$i]);
        }
        return $noHold;
    }
}
$prices = [7,6,4,3,1];

print_r((new Prices())->maxProfit($prices));
posted @ 2021-04-18 11:25  惊风破浪的博客  阅读(6)  评论(0编辑  收藏