数据结构中数组Leetcode 实战Day1
小编最近对算法颇有兴趣,前些天开辟一个新栏目望大家多多关照呀
1 删除排序树组中的重复项
给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1) 额外空间的条件下完成。
示例:
输入:nums = [1,1,2]
输出:2, nums = [1,2]
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。
我的解决方案:
class Solution {
public int removeDuplicates(int[] nums) {
int i = 0;
if(nums.length==0){
return 0;
}
for(int j=1;j<nums.length;j++){
if(nums[i]!=nums[j]){
i++;
nums[i]=nums[j];
}
}
return i+1;
}
}
- 首先设置一个初始值为0的指针
i ,其目的在于记录一个数(重复与否)最开始的数字下标索引并最终返回i+1 (因为题目要求的输出如此,当i 指向最后一个数字时就是一个数组最后的索引)。 - 设置
j 遍历for 循环来判断后面的数是否是重复数!如果是重复数就可以直接找下一个,这是因为我们只需要找到其不同的数并将其扔到i++ 后的下标就可以了。
2 买卖股票的最佳时机
给定一个数组 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 。
解决方案:
思路:
- 通过读图,我们来试图来分析一下。我们假设自己是一个**“任何机会都不会错过的投资员”**,那么对于每一次涨起的机会都不会错过!所以我们可以只关注近些天升的部分而不着重关心跌的部分。
- 其次,我们将以天作为基本单位!!(因为对于投资手而言,连续升2天以上无非就是将两天的收益加起来即可!!)
- 大致就是注重过程的流程
class Solution {
public int maxProfit(int[] prices) {
int result=0;
for(int j=0;j<prices.length-1; j++){
if(prices[j]<prices[j+1]){
result+=prices[j+1]-prices[j];
}
}
return result;
}
}
以上是第一天的算法学习小案例,明天将对后续的数组学习使用再增添案例。
|