Leetcode hot 100之前缀和、差分数组、位运算

news2024/11/19 13:21:24

目录

差分数组-区间增减

和为K的子数组:前缀和 + 哈希表优化

除自身以外数组的乘积:前后缀区间


差分数组-区间增减

想对区间 nums[i..j] 的元素全部加 3,那么只需要让 diff[i] += 3,然后再让 diff[j+1] -= 3

和为K的子数组:前缀和 + 哈希表优化

var subarraySum = function(nums, k) {
    // 创建一个 Map 数据结构,用于存储前缀和及其出现的次数
    const mp = new Map();
    
    // 将前缀和为 0 的情况初始化为 1,表示第一个元素就是和为 0 的子数组
    mp.set(0, 1);

    // 初始化计数器 count 为 0,pre 为前缀和的累加值
    let count = 0, pre = 0;

    // 遍历数组 nums 中的每个元素
    for (const x of nums) {
        // 计算前缀和,即当前元素值与前面元素的和
        pre += x;

        // 如果 Map 中存在前缀和等于 (pre - k) 的记录,表示找到一个子数组的和为 k
        // 在 Map 中查找 (pre - k) 对应的次数,将次数加到计数器 count 上
        if (mp.has(pre - k)) {
            count += mp.get(pre - k);
        }

        // 更新 Map,将当前前缀和 pre 对应的次数加一
        if (mp.has(pre)) {
            mp.set(pre, mp.get(pre) + 1);
        } else {
            mp.set(pre, 1);
        }
    }

    // 返回最终的子数组和为 k 的个数
    return count;
};

除自身以外数组的乘积:前后缀区间

var productExceptSelf = function(nums) {
    const length = nums.length;
    const answer = new Array(length);

    // answer[i] 表示索引 i 左侧所有元素的乘积
    // 因为索引为 '0' 的元素左侧没有元素,所以 answer[0] = 1
    answer[0] = 1;
    for (let i = 1; i < length; i++) {
        answer[i] = nums[i - 1] * answer[i - 1];
    }

    // R 为右侧所有元素的乘积
    // 刚开始右边没有元素,所以 R = 1
    let R = 1;
    for (let i = length - 1; i >= 0; i--) {
        // 对于索引 i,左边的乘积为 answer[i],右边的乘积为 R
        answer[i] = answer[i] * R;
        // R 需要包含右边所有的乘积,所以计算下一个结果时需要将当前值乘到 R 上
        R *= nums[i];
    }
    return answer;
};

小而美的算法技巧:前缀和数组 | labuladong 的算法笔记

位运算

异或:同为0,不同为1

异或运算 XOR:

  • 一个数和 0 做 XOR 运算等于本身:a⊕0 = a
  • 一个数和其本身做 XOR 运算等于 0:a⊕a = 0
  • XOR 运算满足交换律和结合律:a⊕b⊕a = (a⊕a)⊕b = 0⊕b = b

136. 只出现一次的数字:除了某个元素只出现一次以外,其余每个元素均出现2次

将所有数字按照顺序做抑或运算,最后剩下的结果即为唯一的数字
时间复杂度:O(n),空间复杂度:O(1)

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
    let ans = 0;
    for(const num of nums) {
        ans ^= num;
    }
    return ans;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1066018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

广州华锐互动:VR动物解剖实验室带来哪些便利?

随着科技的不断发展&#xff0c;我们的教育方式也在逐步变化和进步。其中&#xff0c;虚拟现实(VR)技术的应用为我们提供了一种全新的学习方式。尤其是在动物解剖实验中&#xff0c;VR技术不仅能够增强学习的趣味性&#xff0c;还能够提高学习效率和准确性。 由广州华锐互动开发…

Web_python_template_injection SSTI printer方法

这题挺简单的 就是记录一下不同方法的rce python_template_injection ssti了 {{.__class__.__mro__[2].__subclasses__()}} 然后用脚本跑可以知道是 71 {{.__class__.__mro__[2].__subclasses__()[71]}} 然后直接 init {{.__class__.__mro__[2].__subclasses__()[71].__i…

实战纪实 | 某米企业src未授权访问

公众号&#xff1a;掌控安全EDU 分享更多技术文章&#xff0c;欢迎关注一起探讨学习 某米企业src漏洞挖掘 这一挖就挖到了一个未授权操作漏洞&#xff0c;写个文章记录下~~ 通过信息收集&#xff0c;发现这么一个资产。 访问 http://xxx.com 如下图所示 1.点击头像-点击授权登…

【SQL Server】表死锁/解锁和sql语句分析

文章目录 表死锁查询锁的进程解锁 sql语句分析来源 表死锁 查询锁的进程 1 首先创建一个测试用的表&#xff1a; CREATE TABLE Test ( TID INT IDENTITY(1,1) ) 2 执行下面的SQL语句将此表锁住&#xff1a; SELECT * FROM Test WITH (TABLOCKX) 3 通过下面的语句可以查看…

【CMU15-445 Part-17】Two-Phase Locking

Part17-Two-Phase Locking Lock Types S-LOCK 共享锁 for reads X-LOCK 排他锁 for writes 上述T1最后R(A) 会导致不可重复读 2PL 允许数据库系统始终以保证Conflict Serializable schedule情况下分发lock Phase #1 Growing 每个txn请求locks 从lock managerlock manager…

万界星空科技云MES系统生产全流程追溯功能介绍

制造业工厂产品质量贯穿于产品的整个生命周期&#xff0c;也是企业参与市场竞争求生存求发展的基础&#xff0c;而制造过程中出现的产品质量问题则是产品最终质量的基石。 随着全球市场竞争的进一步加剧和制造业信息化进程的加快&#xff0c;企业对产品制造过程的质量信息管理…

1876. 长度为三且各字符不同的子字符串

1876. 长度为三且各字符不同的子字符串 C代码&#xff1a;滑动窗口 // 存在三种字符&#xff0c;且不重复、子串数量 int countGoodSubstrings(char * s){int k 3;int hash[26] {0};int len 0;int l 0;int ans 0;for (int i 0; i < strlen(s); i) {hash[s[i] - a];if…

c#设计模式-行为型模式 之 策略模式

&#x1f680;简介 &#x1f424;作为一个开发人员&#xff0c;开发需要选择一款开发工具&#xff0c;如在编写C#时&#xff0c;我们可以选择VisualStudio进行开发&#xff0c;也可以使用Rider 进行开发。 &#x1f433;该模式定义了一系列算法&#xff0c;并将每个算法封装起来…

最新天津python培训机构 Python培训的重要性

Python编程语言近年来备受瞩目&#xff0c;其简洁、易学、多用途的特点受到了众多程序员的喜爱。随着Python的普及程度不断提高&#xff0c;越来越多的人开始关注和学习Python。 Python培训的重要性 Python作为一门编程语言&#xff0c;具有广泛的应用领域&#xff0c;如数据…

linux5.10的一个警告Kernel image misaligned at boot, please fix your bootloader!

平台&#xff1a;rk3399linux5.10 问题&#xff1a;发现启动时有一个内核警告信息 Kernel image misaligned at boot, please fix your bootloader! 后面的数字是我打印的地址信息。 不知道这个内核搞一个这样的警告是什么原因&#xff0c;我就没有继续深挖啦。 一、通过搜…

解决若依框架多次list查询时,分页失效问题

一、问题背景 当若依框架遇到两次及以上的list查询时,会引发分页查询失效问题,如下图: 二、分析原因 分页查询原理 Mybatis的分页原理&#xff0c;大致就是使用MyBatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 SQL,然后重写 SQL&#xff0c;实现分页…

生命不息,分享不止,5款小巧的免费软件

​ 今天继续分享5个超实用的小工具&#xff0c;都是非常小巧精致的免费软件。 1.3D渲染和动画——Luxion KeyShot ​ Luxion KeyShot是一款专业的3D渲染和动画软件&#xff0c;它可以快速地创建逼真的视觉效果。KeyShot支持多种3D格式&#xff0c;可以导入任何模型&#xff0…

【版本控制工具一】Git 安装注册及使用

文章目录 一、Git 、Github、Gitee1.1 概述1.2 码云 相对于 github 的优势 二、Github 或 Gitee注册2.1 注册2.2 创建仓库 三、Git下载与安装四、创建本地仓库 一、Git 、Github、Gitee 1.1 概述 Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或…

大数据软件项目开发流程

大数据软件项目的开发流程通常包括多个阶段&#xff0c;从项目规划和需求分析到开发、测试、部署和维护。以下是一般的大数据软件项目开发流程&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.项目规…

富瑞创新加杠杆平台可靠吗?如何正确评价?

关于富瑞创新加杠杆平台的可靠性&#xff0c;我们需要从多个方面进行评价和分析&#xff0c;包括公司背景、平台服务、风控措施、投资收益等。 首先&#xff0c;富瑞创新加杠杆平台是由富瑞创新投资控股有限公司运营&#xff0c;公司成立于2006年&#xff0c;是一家经过中国证…

8.绘制旗帜(TRIANGLE_FAN)

愿你出走半生,归来仍是少年 通过TRIANGLE_FAN和四个点绘制出旗帜。 1.知识点 1.1.TRIANGLE_FAN 一系列三角形组成的类似于扇形的图形。第二个三角形是由上一个三角形最后一条表和当前点组成。 2.代码 <script setup lang"ts">import { onMounted, …

【C++】指针与引用(学习笔记)

一、左值与右值 左值&#xff1a;编译器为其单独分配了一块存储空间&#xff0c;可以取其地址的&#xff0c;可以放在赋值运算符左边 右值&#xff1a;数据本身。不能取到其自身地址&#xff0c;只能赋值运算右边 左值最常见的情况如西数和数据成员的名字 右值是没有标识符、…

如何轻松使用 ChatGPT 进行论文大纲和创作

ChatGPT能够编写复杂的代码、博客文章等&#xff0c;它可以帮助我们做很多事情。今天本篇文章分享的主要内容如何利用 ChatGPT 来撰写论文文章。下面会介绍如何轻松使用 ChatGPT 进行论文大纲和创作&#xff01; 1、使用 ChatGPT 确定主题 文章非常重要的一个部分就是主题。如…

Bark Ai 文本转语音 模型缓存位置修改

默认缓存位置在&#xff1a;~/.cache 加入环境变量&#xff1a;XDG_CACHE_HOME&#xff0c;指定缓存位置 修改后新的位置为&#xff1a; D:\Ai\Bark\Bark Cache