LeetCode算法题-Two Sum II - Input array is sorted

Codex 100个真实案例 - 用AI自动生成API测试用例(接口测试全覆盖) API 测试是保障后端质量的关键环节,但手写测试用例既枯燥又容易遗漏。本案例将展示如何用 Codex 从 Swagger/OpenAPI 规范文档自动生成 pytest 测试用例——包括正常流程测试、边界值测试、异常参数测试、性能压力测试,还能自动生成 Mock 数据和精美的 HTML 测试报告。全程自然语言驱动,让 API 测试覆盖率从 0 飙到 90%+! 阅读详情

这是悦乐书的第179次更新,第181篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第38题(顺位题号是167)。给定已按升序排序的整数数组,找到两个数字,使它们相加到特定的目标数。函数twoSum应该返回两个数字的索引,使它们加起来到目标,其中index1必须小于index2。

注意:

  • 返回的答案(index1和index2)不是从零开始的。

  • 可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素。

例如:

输入:数字= [2,7,11,15],目标= 9

输出:[1,2]

说明:2和7之和为9.因此index1 = 1,index2 = 2。


本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

此题和LeetCode算法题的第一题Two Sum类似,不过此题定义和条件更加清晰,规定了只存在唯一解,并且将数组进行了排序。

和以前一样,第一种解法是暴力解法,使用双层循环,依次遍历相加判断和是否等于目标值,直到找到两元素为止。但是元素的索引需要加1,因为题目要求索引不从0开始。

特殊情况:当数组为空或者其长度小于2时,直接返回空。

public int[] twoSum (int[] numbers, int target) {
    if (numbers == null || numbers.length < 2) {
        return null;
    }
    int[] index = new int[2];
    for(int i = 0; i < numbers.length; i++) {
        for(int j = i+1; j < numbers.length; j++) {
            if (numbers[i] + numbers[j] == target) {
                index[0] = i+1;
                index[1] = j+1;
            }
        }
    }
    return index[0] == 0 ? null : index;
}

此解法时间复杂度是O(n^2),空间复杂度是O(1)。

03 第二种解法

使用HashMap,遍历数组时,判断当前元素和目标值之间的差值是否存在map中,如果存在,就返回map中此元素的value,即其索引,和当前元素的索引;否则,将当前元素作为key,索引作为value存入map中,然后进行下一次循环。

特殊情况:当数组为空或者其长度小于2时,直接返回空。

public int[] twoSum2 (int[] numbers, int target) {
    if (numbers == null || numbers.length < 2) { 
        return null;
    }
    int[] index = new int[2];
    Map<Integer,Integer> map = new HashMap<Integer,Integer>();
    for (int k=0; k<numbers.length; k++) {
        if (map.containsKey(target-numbers[k])) {
            index[0] = map.get(target-numbers[k]);
            index[1] = k+1;
        }
        map.put(numbers[k], k+1);
    }
    return index[0] == 0 ? null : index;
}

时间复杂度是O(n),空间复杂度是O(n)。

04 第三种解法

既然数组已经是排过序的,使用双指针,每次从前往后和从后往前各取一个元素,判断两数之和是否等于目标值,如果小于目标值,则从前往后的指针向前移动一位;如果大于目标值,则从后往前的指针向前移动一位,直到两数之和等于目标值即可。

特殊情况:当数组为空或者其长度小于2时,直接返回空。

public int[] twoSum3(int[] numbers, int target) {
    if (numbers == null || numbers.length < 2) { 
        return null;
    }
    int start = 0;
    int end = numbers.length - 1;
    while (start < end) {
        int sum = numbers[start] + numbers[end];
        if (sum == target) {
            return new int[] {start+1, end+1};
        } else if (sum < target) {
            start++;
        } else {
            end--;
        }
    }
    return null;
}

此解法的时间复杂度是O(n),空间复杂度是O(1)。

05 小结

算法专题目前已连续日更超过一个月,算法题文章38+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

uniapp [全端兼容] - 实现省市区选择器三四级联动组件,uniapp选择地址自定义省市区三级联动插件,弹框式多级联动选择器区域选择(全平台兼容苹果安卓App、支付宝微信小程序、移动端H5网页) uni-app省市区选择器,省市区街道三级四级联动选择器,uniapp自定义多列选择器省市两级联动,uniapp picker组件实现多级联动,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,uniApp选择器省市区县街道乡镇,uniapp实现省市区选择联动,uniapp城市三级联动(自定义组件)_uniapp三级联动,picker插件省市区联动,uniapp小程序省市区选择器,uni-app 省市区街道的四级联动选择,uniapp怎样实现省市区地址三级联动uni 阅读详情

相关推荐

避坑指南:QT Creator报Unknown module(s) in QT: serialport的5种解决方法

本文详细解析了Qt Creator报'Unknown module(s) in QT: serialport'错误的5种解决方法,包括检查Qt版本兼容性、安装缺失组件、配置Kit环境等。针对Windows和Linux平台提供具体操作步骤,帮助开发者快速解决串口通信模块问题,提升开发效率。

weixin_29197051的博客 157

n个字符串排序(指针数组实现)

然后使用 * 运算符来取出指针所指向的字符串,再使用 strcmp 函数进行比较。这样,在调用 qsort 函数时,我们可以将 cmp 函数的地址作为参数传递,qsort 函数会根据 cmp 函数的返回值来排序指针数组中的元素。在本例中,cmp 函数的作用是比较两个字符串指针所指向的字符串,返回它们的大小关系。具体地,cmp 函数的参数类型为。输入n和n个字符串(每个字符串不超过80个字符)请排序后输出,要求使用指针数组(而不是二维字符数组)处理。,分别指向数组中需要比较的两个元素。

Half-up的博客 2175

DeepSeek跨会话协作指南:让AI成为你的「第二大脑」

通过DeepSeek的跨会话协作系统,用户实测工作效率提升63%。

紫夜若涵的博客 1485

编程题:指针数组实现,将多个字符串按字母顺序输出。

编程题:指针数组实现,将多个字符串按字母顺序输出。#include<stdio.h>void sort(char *str[],int n){ char *temp;int i,j,k; for(i=0;i<n-1;i++) {k=1; for(j=i+1;j<n;j++) if(strcmp(str[k],str...

weixin_34061555的博客 655

【UG/NX二次开发】记录在二次开发中遇到的坑

【UG/NX二次开发】记录在二次开发中遇到的坑

Trust_MJ的博客 2709

【数据挖掘】遗传算法原理浅析:什么是遗传算法?遗传算法的工作原理是什么?

遗传算法(Genetic Algorithm,GA),是进化算法的框架和核心。 各种进化算法有什么异同? - 及时物语的回答 - 知乎 https://www.zhihu.com/question/39152390/answer/901070749

纸羊同学的博客 4288

关于C语言中的数组指针、指针数组以及二级指针

概念解释数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针;在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。数组指针指向的是数组中的一个具体元素,而不是整个数组,所以数组指针的类型和数组元素的类型有关。 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称,即每个元素都是指针。 二级指针 : 如果一个指针指

楼上小宇___home 1万+

手把手教你完成YOLOv8分类识别界面搭建,使用Qt6设计YOLOv8分类识别系统,前台系统+后台管理系统开发实战,全网最详细教程

本项目基于YOLOv8分类模型,结合PySide6框架开发了一套图形化分类识别系统,支持图片、视频和摄像头实时检测。系统包含以下功能: 分类识别模块:完成图像/视频目标分类,界面展示检测结果。 用户管理模块:支持登录注册、头像修改、密码重置等功能。 AI问答模块:集成DeepSeek大模型接口,实现流式输出对话。 后台管理系统(第二版新增):管理员可管理用户信息及个人中心。 系统采用MySQL数据库存储用户数据,并提供完整的UI界面与交互逻辑。代码已开源,适用于毕业设计或快速部署场景。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 827

C语言:利用指针数组指向字符串,对多个字符串进行(选择排序法)

指针数组比较适合用来指向若干个字符串,使字符串处理起来更加灵活 例:将若干字符串按字母顺序(从小到大)输出 思路: 定义指针数组name,用各字符串对它进行初始化(即把各字符串中的第1个字符的地址赋给指针数组的各个元素) 使用选择法进行排序,不移动字符串,而是改变指针数组各个元素的指向 代码如下: //对字符串排序,(选择排序法) #include <s...

zhanhwb的博客 6678

DSP的CLA调试技巧

本文介绍了基于TMS320F28377D的CLA(Control Law Accelerator)开发实战教程,涵盖基础配置、编程、调试与优化全流程。主要内容包括:CLA核心特性及其作为实时控制协处理器的优势;开发环境搭建与工程配置要点;CLA任务调度、数据交换及编程约束;调试技巧如断点设置和性能分析方法;进阶应用案例(批量除法运算)及优化策略;以及推荐的学习资源和硬件平台。教程强调数据一致性和任务同步问题,为快速上手CLA开发提供实用指导。

1048

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

[LeetCode] 167. Two Sum II - Input array is sorted

原题链接: https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/ 1. 题目描述 Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific...

Ber03的博客 262

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

167. Two Sum II - Input array is sorted

文章目录167. Two Sum II - Input array is sortedDescriptionSolutionsSubmissionsSummary 167. Two Sum II - Input array is sorted https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/ Description So...

La La Land 166

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

leetcode 167: Two Sum II - Input array is sorted

Two Sum II - Input array is sorted Total Accepted: 441 Total Submissions: 1017 Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a

西施豆腐渣 9969

lc167. Two Sum II - Input array is sorted

167. Two Sum II - Input array is sorted Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number. The function twoSum sh...

weixin_34345560的博客 197

Leetcode日练笔记11 #350 #167 Intersection of Two Arrays II & Two Sum II - Input array is sorted

#350 Intersection of Two Arrays II Given two integer arraysnums1andnums2, returnan array of their intersection. Each element in the result must appear as many times as it shows in both arrays and you may return the result inany order. 解题思路: 还是用回之...

Bittersweet_t的博客 1743

LeetCode: 167. Two Sum II - Input array is sorted

LeetCode: 167. Two Sum II - Input array is sorted Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number. The

qha0731的专栏 312

【Leetcode】Two Sum II - Input array is sorted

题目链接:https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/ 题目: Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specifi

业精于勤,荒于嬉 1425

[LeetCode]167. Two Sum II - Input array is sorted

[LeetCode]167. Two Sum II - Input array is sorted题目描述思路开始的思路是暴力解,虽然用例都通过了,但是超时了 看了超时的用例,发现是太多重复造成的 于是加了重复检测的条件判断,提交通过之后发现速度太慢 换一种思路 两个指针从数组两边同时向中间移动,如果数字之和小于目标,则移动左指针,否则移动右指针代码注释部分为暴力解法#include <io

Lcharon的博客 427

LeetCode 167. Two Sum II - Input array is sorted--Python解法

LeetCode 167. Two Sum II - Input array is sorted–Python解法 LeetCode题解专栏:LeetCode题解 LeetCode 所有题目总结:LeetCode 所有题目总结 大部分题目C++和Python的解法都有。 题目地址:Two Sum II - Input array is sorted - LeetCode Given an a...

个人博客 598

【LeetCode】167. Two Sum II - Input array is sorted

我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 微信公众号介绍:Microstrong(小强)同学主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容,分享在学习过程中的读书笔记!期待您的关注,欢迎一起学习交流进步! 知乎主页:https://www.zhihu.com/people/MicrostrongAI/activities Github:https://github.com/Microstrong0305 个人博客:https://blo.

Microstrong 694

刷题系列(1)LeetCode167-Two Sum II - Input array is sorted

刷题系列(1)LeetCode167-Two Sum II - Input array is sorted 题目: Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two number

qq_44459787的博客 1万+

LeetCode 167.Two Sum II - Input array is sorted【Java】

题目描述 167. 两数之和 II - 输入有序数组 AC代码 class Solution { public int[] twoSum(int[] numbers, int target) { int[] res=new int[2]; int i=0,j=numbers.length-1; while(i<numbers.lengt...

NayelyA的博客 261

Two Sum II - Input array is sorted

Problem (from Leetcode) [1]: Given an array of integers that is alreadysorted in ascending order, find two numbers such that they add up to a specific target number. The function twoSum should re...

qq_24004629的博客 145
上一篇: LeetCode算法题-Intersection of Two Linked Lists(Java实现)
下一篇: LeetCode算法题-Excel Sheet Column Title(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值