剑指 Offer 57. 和为s的两个数字 + 二分法 + 双指针
2024-10-09 03:11:44
剑指 Offer 57. 和为s的两个数字
Offer_57
题目详情
使用二分法
package com.walegarrett.offer;
/**
* @Author WaleGarrett
* @Date 2021/2/10 18:57
*/
/**
* 题目详情:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。
* 如果有多对数字的和等于s,则输出任意一对即可。
*/
import java.util.ArrayList;
import java.util.Arrays;
/**
* 解法一:使用二分法查找法
*/
public class Offer_57 {
public int[] twoSum(int[] nums, int target) {
int len = nums.length;
boolean flag = false;
int[] result = new int[2];
int i,index=0;
for(i=0; i<len; i++){
int now = nums[i];
int another = target-now;
int left = i+1,right = len;
if(left == len)
break;
index = Arrays.binarySearch(nums, left, right, another);
if(index >= 0){
flag = true;
break;
}
}
if(flag)
return new int[]{nums[i],nums[index]};
return new int[0];
}
}
使用双指针法
/**
* 解法二:使用双指针法
*/
class Offer_57_1 {
public int[] twoSum(int[] nums, int target) {
int len = nums.length;
int i = 0, j=len-1;
while(i<j){
int sum = nums[i] + nums[j];
if(sum < target)
i++;
else if(sum > target)
j--;
else return new int[]{nums[i], nums[j]};
}
return new int[0];
}
}
复杂度分析
- 时间复杂度 O(N) : N 为数组 nums 的长度;双指针共同线性遍历整个数组。
- 空间复杂度 O(1) : 变量 i, j 使用常数大小的额外空间。
最新文章
- markdown简要说明显示样式
- AWS EC2首次使用VPS
- ubuntu16.04安装jdk,tomcat
- 自增序号,而且默认变量就是$i,也就是说在你的volist标签之内,可以直接使用$i
- android Tab 类型切换界面
- AngularJs——grunt神器的使用
- php使用过滤器filter_var轻松验证邮箱url和ip地址等
- chrome下float元素下input选中内容bug
- dev/null和dev/zero区别 以及换回设备(loopback device)
- JavaScript使用需要注意的细节
- java日期处理总结(二)
- 基于CPS变换的尾递归转换算法
- xml读取一行数据
- Git详解之二:Git基础
- BSGS算法(大步小步算法)
- 2018-2019-2 20175329许钰玮 实验二《Java面向对象程序设计》实验报告
- placeholder效果
- JS转换HTML转义符,编码及解码
- heartbeat 非联网安装(通过配置本地yum文件库安装heartbeat)
- UML建模——用例图(Use Case Diagram)
热门文章
- Codeforces Round #683 (Div. 2, by Meet IT) D. Catching Cheaters (DP)
- 5.2 spring5源码--spring AOP源码分析三---切面源码分析
- dp的小理解
- JavaScript预编译过程理解
- K8s(一)----容器编排工具基础概念
- js 构造函数 &; 静态方法 &; 原型 &; 实例方法
- WebVR &; CSS 3D &; WebGL
- React Native &; CodePush &; App Center
- nodejs 显示进度条插件
- Dart: 解析html字符串