LeetCode初级算法解析:数组操作与股票交易

需积分: 16 0 下载量 14 浏览量 更新于2024-09-07 收藏 10.57MB PDF 举报
"LeetCode初级算法-数组(手写)" 在LeetCode的初级算法中,数组是一个重要的数据结构,本资源涵盖了10个与数组相关的编程题目,这些题目都是手写的,虽然清晰度可能不够理想,但仍然能提供有效的学习体验。下面,我们将详细探讨数组相关的一些知识点。 1. **从排序数组中删除重复元素** 这个问题要求在不使用额外数组的情况下,在原地修改数组,使得每个元素只出现一次。这通常涉及到双指针技巧,一个指针用于遍历数组,另一个指针用于标记已处理过的元素。例如,可以使用两个指针`i`和`j`,`i`用于遍历整个数组,`j`始终指向未处理的最后一个元素。当`nums[i] != nums[j]`时,将`nums[j+1]`赋值为`nums[i]`,然后移动`j`。最后,数组的长度将减小,且所有元素都是唯一的。 2. **买卖股票的最佳时机** 这个问题是经典的动态规划问题,目标是找到最大的利润。我们可以维护一个变量来记录当前的最低价格,然后在遍历过程中,如果当前价格大于最低价格,则更新最大利润。例如,可以使用一个变量`min_price`记录最低价格,一个变量`max_profit`记录最大利润,遍历数组时,如果`nums[i] < min_price`,更新`min_price`;如果`nums[i] > min_price`且`nums[i] - min_price > max_profit`,更新`max_profit`。 3. **旋转数组** 旋转数组是将数组的一部分移到数组的末尾,例如向右移动k个位置。这个问题可以使用两次翻转来解决,首先将数组的后半部分翻转,然后将整个数组翻转。例如,对于数组`nums`,先翻转`nums[k:]`,再翻转整个`nums`,即可实现原地旋转。 4. **判断数组中是否存在重复元素** 要检查数组中是否有重复元素,可以直接使用哈希集合(如Python的set),遍历数组并将每个元素添加到集合中。如果在添加过程中发现元素已经存在于集合中,那么就存在重复元素。若遍历结束后,集合的大小等于数组长度,说明数组中没有重复元素。 5. **找出数组中只出现一次的数字** 这个问题可以利用异或操作的性质,即任何数与其自身异或的结果是0。因此,数组中所有元素异或的结果就是只出现一次的数字。例如,可以遍历数组,对所有元素进行异或操作,最后得到的结果就是我们要找的数字。 以上是对LeetCode初级算法中数组相关问题的一些基本讲解。这些问题涵盖了数组操作、双指针、动态规划、翻转和异或等概念,是提升编程能力和算法理解的重要练习。通过手写代码的方式,可以更好地理解和掌握这些算法。