LeetCode算法题---两数之和(一)

news/2024/11/25 14:48:41/

两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9 
输出:[0,1] 
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6 
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6 
输出:[0,1]

解题代码:

class Solution {public int[] twoSum(int[] nums, int target) {int[] newNums = Arrays.copyOf(nums, nums.length);Arrays.sort(newNums);int left = 0;int right = newNums.length - 1;while (left < right) {int sum = newNums[left] + newNums[right];if (sum > target) {right--;} else if (sum < target) {left++;} else {break;}}int index1 = -1;int index2 = -1;for (int i = 0; i < nums.length; i++) {if (nums[i] == newNums[left] && index1 == -1) {index1 = i;} else if (nums[i] == newNums[right] && index2 == -1) {index2 = i;}if (index1 != -1 && index2 != -1) {break;}}return new int[] {index1, index2};}
}

解题思路:

这是一个 Java 实现的两数之和问题的解法。下面是每一段的具体解释:

public int[] twoSum(int[] nums, int target) {

这是一个公共方法  twoSum,它接收两个参数: nums 表示需要进行计算的整数数组,target 表示需要满足的条件,即两数之和等于 target。方法返回一个包含两个值的整数数组,这两个值分别是相加等于目标值的两个数在原数组中的下标。

int[] newNums = Arrays.copyOf(nums, nums.length);

将原始数组 nums 复制到新的数组 newNums。

Arrays.sort(newNums);

对新数组 newNums 进行排序。

int left = 0; int right = newNums.length - 1;

定义两个指针 left 和 right,它们分别指向排序后的数组 newNums 的最左侧和最右侧。

while (left < right) { int sum = newNums[left] + newNums[right]; if (sum > target) { right--; } else if (sum < target) { left++; } else { break; } }

在数组 newNums 上执行双指针循环。根据指针指向的两个元素之和与目标值 target 的比较情况,调整指针的位置,直到满足条件(两数之和等于目标值),或者指针重合(没有找到答案)。

int index1 = -1; int index2 = -1; for (int i = 0; i < nums.length; i++) { if (nums[i] == newNums[left] && index1 == -1) { index1 = i; } else if (nums[i] == newNums[right] && index2 == -1) { index2 = i; } if (index1 != -1 && index2 != -1) { break; } }

根据有序数组 newNums 的结果,遍历原始数组 nums,找到相加等于目标值的两个值在原数组中的下标。

return new int[] {index1, index2};

将两个下标封装到一个新的数组中并返回。


http://www.ppmy.cn/news/502938.html

相关文章

C++ 教程(19)——日期 时间

C 日期 & 时间 C 标准库没有提供所谓的日期类型。C 继承了 C 语言用于日期和时间操作的结构和函数。为了使用日期和时间相关的函数和结构&#xff0c;需要在 C 程序中引用 <ctime> 头文件。 有四个与时间相关的类型&#xff1a;clock_t、time_t、size_t 和 tm。类型…

求一个好用的简洁设置的PPT倒计时器

标题求一个好用的简洁设置的PPT倒计时器 求一个好用的简洁设置的PPT倒计时器&#xff0c;不要复杂的设置&#xff0c;只要位置、大小、时间设置。

计时器的设计

利用前面关卡中设计的60进制计数器和24进制计数器&#xff0c;来联合设计一个24小时的计数器&#xff0c;要求具有同步置数、异步清零功能。

可任意设置时间的ppt倒计时软件

可任意设置时间的ppt倒计时软件 ppt倒计时软件&#xff0c;非定义宏插件&#xff0c;安装即可使用&#xff0c;十分简约&#xff0c;倒计时时长以及显示颜色可任意调整。 用起来很方便简单易上手。

PPT 播放计时器

PowerPoint 演示文稿播放计时器&#xff0c;是一款自主开发的办公用小应用软件&#xff0c;针对不同名称的 PowerPoint文稿&#xff0c;可分别设置不同的播放时间和提醒时间&#xff0c;广泛适应于各类企业、学校、政府等单位的工作汇报&#xff0c;能满足用户对汇报时间的精准…

用定时器控制LCD显示计时功能

用定时器控制LCD显示计时功能 #include <REGX52.H> #include "LCD1602.h" int hour0,minute0,second0; //全局变量 时&#xff0c;分&#xff0c;秒 void time0_Init() //定时1ms {TMOD0x01; //设置工作方式为模式1&#xff0c;16位计时器EA1; //CPU开…

网页或大屏展示的倒计时器

1、可展示在网页和大屏。 2、可设置倒计时时间、暂停、继续、重置、带音效 3、下载地址&#xff1a;网页活大屏展示的倒计时器&#xff0c;可设置倒计时时间、暂停、继续、重置、带音效-Javascript文档类资源-CSDN下载

如何设置PPT演示文稿的倒计时器

转载者&#xff1a; 医学幻灯片模板下载 来源: www.2ppt.cn 在ppt上实现倒计时一是为了追求个性化的PPT;二是为了实用&#xff0c;其方法微观经济学ppt课件网上介绍了不少&#xff0c;特别是对于初学者&#xff0c;有些看了甚至会云里雾里的感觉……本着简单、实…