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

逻辑运算短路现象记录

在刷力扣15. 三数之和这道题时遇到了逻辑运算的短路现象,这个名词我只在本科大一上的C语言课上听老师说过,今天在写这道题的时候碰到了,一开始我还以为是二维vector的初始化问题,下面详细道来:

在这道题中,首先要做的是去重,很容易想到的一种去重方法是,将原数组进行排列后,如果数组的第一个元素还是大于0的,则这个数组不会有这样的一个三元组,它们的和为0。

第二种去重是要注意这种情况[a, a, ...], 如果本轮a和上轮a相同,那么找到的b,c也是相同的,所以去重a。

我一开始是这么写的判断条件:

if (i > 0 && nums[i] == nums[i - 1]) {
    continue;
}

然后力扣一直报错数组越界,是因为:

  • 首先判断 nums[i] == nums[i - 1]

  • 在判断 nums[i] == nums[i - 1] 之前,没有对 i 的值进行任何检查。

  • 如果 i0,则 nums[i - 1] 就变成了 nums[-1],这是一个非法的数组访问,会导致数组越界错误(例如在 C/C++ 中可能触发运行时错误,如段错误)。

这里就涉及到了逻辑运算中的短路现象:当 nums[i] == nums[i - 1] 的判断失败(例如数组越界导致程序崩溃)时,后面的 i > 0 根本不会被执行。

短路现象是指:

  • 对于 A && B,如果 Afalse,则不会计算 B

  • 对于 A || B,如果 Atrue,则不会计算 B


http://www.kler.cn/a/532630.html

相关文章:

  • 02.04 数据类型
  • 机器学习10
  • Vue3学习笔记-模板语法和属性绑定-2
  • 企微SCRM驱动企业私域流量营销与客户关系管理的智慧革新
  • vim如何解决‘’文件非法关闭后,遗留交换文件‘’的问题
  • PHP 常用函数2025.02
  • PostCss
  • 关于deepseek的一些普遍误读
  • Vant框架:助力移动端开发的利器
  • SpringBoot 连接Elasticsearch带账号密码认证 ES连接 加密连接
  • 7.2.背包DP
  • 获取 ARM Cortex - M 系列处理器中 PRIMASK 寄存器的值
  • Azure DevOps Server:集成奇安信开源卫士(OpenSourceSafe)
  • 16 旋转操作模块(rotation.rs)
  • napalm_ce 报错 No module named ‘netmiko.ssh_exception‘ 解决方案(随手记)
  • 17 形状边缘偏移量模块(side_offsets.rs)
  • git-secret 使用教程
  • JVM- 垃圾回收算法
  • Leetcode922: 按奇偶排序数组 II
  • [Go]一、Go语言基础
  • 基于 docker 的mysql 5.7 主主集群搭建
  • fpga系列 HDL:XILINX Vivado ZYNQ-7000 PS-PL数据交互 AXI4 实现笔记
  • ros 发布Topic
  • 【力扣】238.除自身以外数组的乘积
  • Rust HashMap :当储物袋遇上物品清单
  • 基于CY8CKIT-149 BLE HID设备实现及PC控制功能开发(BLE HID+CapSense)