刷题练习笔记

目录

1、消失的数字

2、旋转数组

3、原地移除元素

4、删除排序数组中的重复项


1、消失的数字

oj:面试题 17.04. 消失的数字 - 力扣(LeetCode)

思路(参考评论区):

利用异或的特性,ret = ret ^ x ^ x。级对同一个值异或两次,结果等于它本身

所以对 ret 从 0 - nums.length 进行异或,同时对 nums 数组中的值进行异或,出现重复的会消失,所以最后 ret 的值是只出现一次的数字,也就是nums数组中缺失的那个数字。

java 复制代码
class Solution {
    public int missingNumber(int[] nums) {
        int ret = 0;
        for(int i = 0; i < nums.length; i++) {
            ret ^= i;
            ret ^= nums[i];
        }
        ret ^= nums.length;
        return ret;
    }
}

2、旋转数组

oj:189. 轮转数组 - 力扣(LeetCode)

思路:

  1. 使用额外的数组将每个元素放至旋转后的位置

  2. 遍历原数组,将原数组下标为 i 的元素放至新数组下标为 (i+k)%n 的位置

  3. 再把新数组写回原数组

java 复制代码
class Solution {
    public void rotate(int[] nums, int k) {
        int len = nums.length;
        int[] newArr = new int[len];
        for(int i = 0; i < len; i++){
            newArr[(i+k)%len] = nums[i];
        }
        for(int j = 0; j < len; j++){
            nums[j] = newArr[j];
        }
    }
}

3、原地移除元素

oj:226. 翻转二叉树 - 力扣(LeetCode)

思路:

  1. 遍历数组 nums,设置一个下标 ans
  2. 在遍历过程中如果出现数字不是需要被移除的值,则把这个数字覆盖到ans所在的下标位置,ans 自增 1
  3. 如果相同的时候,则跳过该数字不进行覆盖,最后 ans 即为新的数组长度
java 复制代码
// 时间复杂度:O(n),空间复杂度:O(1)
class Solution {
    public int removeElement(int[] nums, int val) {
        int ans = 0;
        for(int i = 0; i<nums.length; i++) {
            if(nums[i] != val) {
                nums[ans] = nums[i];
                ans++;
            }
        }
        return ans;
    }
}

4、删除排序数组中的重复项

oj:26. 删除有序数组中的重复项 - 力扣(LeetCode)

思路:

  1. 与上题类似,使用两个指针,fast用于遍历数组,slow位置用于存放不重复项

  2. 在遍历过程中如果出现数字不是重复值,则把这个数字覆盖到slow所在的下标位置

  3. slow+1 即为数组中唯一元素的数量

java 复制代码
class Solution {
    public int removeDuplicates(int[] nums) {
        int fast = 1;
        int slow = 0;
        for(; fast<nums.length; fast++) {
            if(nums[fast] != nums[slow]) {
                nums[slow+1] = nums[fast];
                slow++;
            }
        }
        return slow+1;
    }
}
相关推荐
AD钙奶-lalala1 小时前
Mac OS上搭建 http server
java
luckys.one2 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
~|Bernard|3 小时前
在 PyCharm 里怎么“点鼠标”完成指令同样的运行操作
算法·conda
战术摸鱼大师3 小时前
电机控制(四)-级联PID控制器与参数整定(MATLAB&Simulink)
算法·matlab·运动控制·电机控制
Christo33 小时前
TFS-2018《On the convergence of the sparse possibilistic c-means algorithm》
人工智能·算法·机器学习·数据挖掘
汇能感知4 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun4 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
好家伙VCC4 小时前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
茯苓gao5 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾5 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang