php:从排序数组中删除重复项以及买卖股票的最佳时机问题

思路:使用两个指针,一个快指针遍历整个数组,慢指针在检测到与快指针对应的值不等时,向前移动

  • php实现代码:
class Solution {

    /**
     * @param Integer[] $nums
     * @return Integer
     */
    function removeDuplicates(&$nums) {
        $len = count($nums);
        if($len <=1){
            return $len;
        }
        $j = 0;  //慢指針
        for($i=1;$i < $len; $i++){            
            if($nums[$i] != $nums[$j]){
                $nums[++$j] = $nums[$i];                   
            }
        }
        return $j+1;
    }
}
int removeDuplicates(int* nums, int numsSize) {
   if(numsSize <= 1){
       return numsSize;
   } 
   int j = 0;
   for(int i = 0; i < numsSize; ++i){
       if(nums[i] != nums[j]){
           nums[++j] = nums[i];
       }
   }
    return j+1;
}

 

  •  类似问题:买卖股票的最佳时机 
class Solution {

    /**
     * @param Integer[] $prices
     * @return Integer
     */
    function maxProfit($prices) {
        $len = count($prices);
        if($len <= 1) return 0;
        $sum = $j = 0;
        for($i = 1; $i < $len; ++$i){
            if($prices[$i] <= $prices[$j]){
                ++$j;                
            }else{
               $sum += $prices[$i] - $prices[$j];
                $j = $i;
            }
            
        }
        return $sum;
    }
}

 

posted @ 2019-03-07 16:50  xuzeng  阅读(274)  评论(0)    收藏  举报