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

【力扣打卡系列】滑动窗口与双指针(两数之和)

坚持按题型打卡&刷&梳理力扣算法题系列,语言为go,Day1

两数之和
  • 题目描述
    在这里插入图片描述
  • 解题思路
    • 采用哈希表
      • 将nums[i] + nums[j] = target 转化成 nums[i] = target - nums[j]去思考
      • 新建一个map来存储,键为值(左边的),值为索引
      • 遍历数组nums的时候,先将当前键进行比对检验(看target - x键是否存在,存在就是找到了)
        • 如果没找到的话就先把当前的nums[j]作为当前map键(x,也就是nums[j]对应的值)值(j,也就是当前nums的索引)存进去
  • 代码参考
func twoSum(nums []int, target int) []int {
    idx :=map[int]int{}
    for j,x:=range nums{
        i,ok:=idx[target-x]
        if ok{
            return []int{i,j}
        }
        idx[x]=j
    }
    return nil
}
两数之和——输入有序数组
  • 题目描述
    在这里插入图片描述
  • 解题思路
    • 使用双指针
      • 因为有序,如果和已经比target小了,那么前面的值就可以不要了(操作表现为左指针后移)
      • 同理,如果当前和已经比target大了,那么后面的值就可以不要了(操作表现为左指针前移)
  • 代码参考
func twoSum(numbers []int, target int) []int {
    left,right :=0, len(numbers)-1
    for {
        if numbers[left] + numbers[right] == target{
            return []int{left+1,right+1}
        }
        if numbers[left] + numbers[right] > target{
            right--
        }
        if numbers[left] + numbers[right] < target{
            left++
        }
    }
    return nil
}
  • tips
    • for{}直接写=while true的效果
    • 定义了未使用的变量会报错
    • go中获取数组长度用len(nums)-1,注意根据题目要求决定要不要-1

http://www.kler.cn/news/360220.html

相关文章:

  • “射线沿其正向平移可变为其真子集”这一中学“常识”其实是几百年重大错误——百年病态集论的症结
  • 【Qt】绘图API
  • YashanDB学习-服务启停
  • 【Java 22 | 7】 深入解析Java 22 :密封类(Sealed Classes)增强详解
  • LTD助力经营数字化,浙商数智营销学堂开讲入站营销新理念
  • 【视频编码】视频编码中拉格朗日乘子法的简单理解
  • 基于SSM+微信小程序的家庭记账本管理系统(家庭1)
  • 08_实现 reactive
  • DAPLINK 源码学习(1)BL 之 main() 函数
  • typescript 的类型注解和类型断言
  • C#学习笔记(十)
  • 拥抱“新市民” ,数字银行的“谋与变”
  • jetson agx orin 的pytorch、torchvision安装
  • el-table表格数据处理,列表将变更前数据放置在前面,变更后数据放在表格后面
  • 第1篇:计算机网络概述与基础
  • 【小白学机器学习15】 概率论的世界观
  • Web,RESTful API 在微服务中的作用是什么?
  • 【修订中】ffmpeg 知识点
  • 从传统到智能,从被动监控到主动预警,解锁视频安防平台EasyCVR视频监控智能化升级的关键密钥
  • 【小程序】-基础语法(二)