力扣-初级算法-数组(1-2)题

参考大佬:https://leetcode-cn.com/u/sdwwld/

文章目录

  • 1,删除排序数组中的重复项
        • 示例 1:
        • 示例 2:
        • 没刷过题时候的写法,
        • 优化写法(使用双向指针)
  • 2,买卖股票的最佳时机 II
        • 示例 1
          • 方式一

1,删除排序数组中的重复项

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

示例 1:

输入:nums = [1,1,2]
输出:2, nums = [1,2]
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中>超出新长度后面的元素。

示例 2:

输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。

没刷过题时候的写法,

遍历法,相邻两个相等就进,然后把 j = 当前位置 i ,然后进行左移覆盖前面的值,不相等则往后走,
超时

int removeDuplicates(int* nums, int numsSize){
        int i,j;
        int result = numsSize;
        for(i=0;i<numsSize-1;)
        {
            if(nums[i]==nums[i+1])
            {
                for(j=i;j<numsSize-1;j++)
                {
                    nums[j] = nums[j+1];
                }
                result--;
            }
            else
            {
                i++;
            }
        }
        return result;
}

优化写法(使用双向指针)

初始化左指针指向第0位,右指针指向第1位,右指针始终向右移动,左指针和右指针值一样,左指针不动,右指针向右移动一位,右指针指向的值不等于左指针指向的值,那么左指针往右移一步,然后再把右指针指向的值赋给左指针。

int removeDuplicates(int* nums, int numsSize){
    if (nums == NULL || numsSize == 0)
        return 0;
    int left = 0;
    int right = 1;
    for(;right<numsSize;right++)
    {
        if(nums[left]!=nums[right])
        {
            left++;
            nums[left] = nums[right];

        }
    }
    return ++left;

}

2,买卖股票的最佳时机 II

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

示例 1

输入: prices = [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3

方式一

比如a

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if(prices.empty())
            return -1;
        int total = 0;
        for(int i=0;i<prices.size()-1;i++)
        {
            int temp = prices[i+1]-prices[i];
            if(temp>0)
            {
                total += temp;
            }
        }
        return total;
    }
};

你可能感兴趣的:(力扣-初级算法,c++,c语言,算法)