LeetCode初级算法高效题解(含思路注释)
文章目录
- LeetCode初级算法高效题解(含思路注释)
- 前言
- 一、数组
- 1.删除排序数组中的重复项
- 2.买卖股票的最佳时机 II
- 3.旋转数组
- 4.存在重复元素
- 总结
前言
决定用四个月过一下算法
一、数组
1.删除排序数组中的重复项
class Solution {
public int removeDuplicates(int[] nums) {
int left=0;
//请你 原地 删除重复出现的元素,使每个元素 只出现一次
for(int right=1;right<nums.length;right++){
//如果右等于左,左不变,右加一
if(nums[right]!=nums[left]){
//左指针先往前再赋值
left++;
nums[left]=nums[right];
}
}
return left+1;
}
}
2.买卖股票的最佳时机 II
class Solution {
public int maxProfit(int[] prices) {
int sum=0;
//本题即求无序数组的最大值与最小值的差
for(int i=0;i<prices.length-1;i++){//注意length-1这里外层循环遍历到倒数第二个即可
if(prices[i+1]>prices[i]){//如果后一个大于前一个则把两者差值存进sum
sum+=prices[i+1]-prices[i];//两两前后遍历的差值和即为最低值与最高值的差值
}
}
return sum;
}
}
3.旋转数组
class Solution {
public void rotate(int[] nums, int k) {
int length=nums.length;
int[] tem=new int[length];
//先用临时数组存原数组方便后边原数组存值
for(int i=0;i<length;i++){
tem[i]=nums[i];
}
//用i与偏移量k两者和去取余数组长度,得到偏移后的位置
for(int i=0;i<length;i++){
nums[(i+k)%length]=tem[i];
}
}
}
4.存在重复元素
class Solution {
public boolean containsDuplicate(int[] nums) {
Set<Integer> set=new HashSet<>();//hashSet重复元素不可插入
for(int i=0;i<nums.length;i++){
//hashSet.add如果返回false则说明有重复元素插入
if(!set.add(nums[i])){
return true;
}
}
return false;
}
}
总结
这个月先过一遍基础算法,后边再做打算。