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;
    }
}
总结
这个月先过一遍基础算法,后边再做打算。



















