当前位置: 首页 > news >正文

刷题练习笔记

目录

1、消失的数字

2、旋转数组

3、原地移除元素

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


1、消失的数字

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

思路(参考评论区):

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

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

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. 再把新数组写回原数组

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 即为新的数组长度

// 时间复杂度: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 即为数组中唯一元素的数量 

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;
    }
}


文章转载自:
http://aciduria.zekgq.cn
http://cancrine.zekgq.cn
http://chromatophil.zekgq.cn
http://advertiser.zekgq.cn
http://buzkashi.zekgq.cn
http://cardinalship.zekgq.cn
http://borneo.zekgq.cn
http://azania.zekgq.cn
http://actinotherapy.zekgq.cn
http://adpcm.zekgq.cn
http://ascendency.zekgq.cn
http://agglomeration.zekgq.cn
http://berserkly.zekgq.cn
http://angelica.zekgq.cn
http://bedeswoman.zekgq.cn
http://autocephaly.zekgq.cn
http://alcoholysis.zekgq.cn
http://bootery.zekgq.cn
http://boobery.zekgq.cn
http://aerolith.zekgq.cn
http://adjt.zekgq.cn
http://calescence.zekgq.cn
http://chauffer.zekgq.cn
http://antisickling.zekgq.cn
http://banister.zekgq.cn
http://calmative.zekgq.cn
http://chastiser.zekgq.cn
http://anagogic.zekgq.cn
http://bushmanoid.zekgq.cn
http://atmospherically.zekgq.cn
http://www.dtcms.com/a/72462.html

相关文章:

  • Leetcode-1278.Palindrome Partitioning IV [C++][Java]
  • Word 小黑第18套
  • 《Operating System Concepts》阅读笔记:p309-p330
  • 开启云服务器ubuntu22.04的远程桌面,支持Windows远程连接 - 开启XRDP支持
  • TypeScript装饰器
  • An effective algorithm for peptide de novo sequencing from MS/MS spectra
  • 二分算法刷题
  • 【NLP】 4. NLP项目流程与上下文窗口大小参数的影响
  • llama-factory笔记
  • python二级复习(1)
  • 编程题-第k个语法符号(中等)
  • 在react当中利用IntersectionObserve实现下拉加载数据
  • 使用生成对抗网络(GAN)进行人脸老化生成的Python示例
  • Conda 虚拟环境创建:加不加 Python 版本的深度剖析
  • Python(最新版)集成开发环境PyCharm下载安装详细教程
  • 开源WAF雷池本地化部署与远程查看网站安全防护的详细操作指南
  • 深度解析螺栓连接计算题:原理、计算与应用
  • Helm 简介与安装
  • 【leetcode hot 100 199】二叉树的右视图
  • ModelScope推理QwQ32B
  • SpringBoot手动注册定时任务
  • 【WRF-Urban】使用 CGLC-MODIS-LCZ_100m 数据集运行 WRF 时的城市参数化问题
  • 从0开始搭建微服务架构特别篇SpringCloud网关聚合knife4j
  • S/4 ERP QM 结合 EWM
  • 【C#】Http请求设置接收不安全的证书
  • 通义Qwen实战(1): 环境安装及微调实战
  • 蓝桥杯每日一题——Acwing 5438. 密接牛追踪2
  • Linux mount和SSD分区
  • JetsonOrin源码安装部署PaddlePaddle
  • 【java】集合的基本使用