当前位置:网站首页>数组与字符串13-两数之和等于目标数
数组与字符串13-两数之和等于目标数
2022-08-03 05:25:00 【花开花落夏】
两数之和等于目标数
一 题目
源自leetcode
给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。
提示:你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。
二 解题
可以使用暴力破解来求此题。对于numbers为[2,7,11,15],元素不重复的两数有:(2,7), (2,11), (2,15), (7,11), (7,15), (11,15).由于要求1 <= answer[0] < answer[1] <= numbers.length ,因此两个数我们按从小到大的顺序来写。其中,因为numbers为非递减顺序排列,所以结果能取到的最大值为target-numbers[0],因为numbers[0]为最小的值。
代码:
class Solution {
public int[] twoSum(int[] numbers, int target) {
int[] result = new int[2];
int max = target - numbers[0];
boolean flag = false;
for(int i =0;i<numbers.length-1;i++){
for(int j = i+1;j< numbers.length;j++){
if(numbers[j]>max){
break;
}else if(numbers[i]+numbers[j]==target){
//题目要求index从1开始
result[0]=i+1;
result[1]=j+1;
flag=true;
break;
}
}
if(flag){
break;
}
}
return result;
}
}
三 优化
可以使用双指针来简化操作,使用两个指针left与right,初始化时left=0,指向最小值,right=numbers.length-1,指向最大值。由于数组为非递减顺序排列,所以当numbers[left]+numbers[right]>target时,right–,找更小的值。numbers[left]+numbers[right]<target时,left++,找更大的值。
class Solution {
public int[] twoSum(int[] numbers, int target) {
int left = 0,right = numbers.length-1;
while (left<right){
if(numbers[left]+numbers[right]==target){
return new int[]{
left+1,right+1};
}else if(numbers[left]+numbers[right]>target){
right--;
}else{
left++;
}
}
return new int[]{
-1,-1};
}
}
边栏推荐
猜你喜欢
随机推荐
常见的电子元器件分类介绍-唯样商城
神经网络基础
二阶段提问总结
9. Please introduce the class loading process, what is the parent delegation model?
ZEMAX | 如何创建简单的非序列系统
什么是参数化设计,通过实操了解一下? | SOLIDWORKS 操作视频
C# 数组之回溯法
opencv透视变化
MMU 介绍-[TBL/page table work]
自监督论文阅读笔记 Self-supervised Learning in Remote Sensing: A Review
采用Trench肖特基二极管,实现功率密度的显著提升
浮点型数据在内存中存储的表示
贴片电阻的结构是怎样的?唯样商城
自监督论文阅读笔记 SimCLRV2 Big Self-Supervised Models are Strong Semi-Supervised Learners
enum和enum class的区别
损失函数(第五周)
自监督论文阅读笔记 Ship Detection in Sentinel 2 Multi-Spectral Images with Self-Supervised Learning
SQLMAP介绍及使用
电子元器件之电子变压器可分为哪几类?
进程间通讯 (IPC 技术) - 信号