剑指 Offer 57. 和为s的两个数字 + 二分法 + 双指针
剑指 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 使用常数大小的额外空间。
剑指 Offer 57. 和为s的两个数字 + 二分法 + 双指针的更多相关文章
- 力扣 - 剑指 Offer 57. 和为s的两个数字
题目 剑指 Offer 57. 和为s的两个数字 思路1(哈希表) 这题首先想到的是使用两个for遍历,查找是哪两个相加等于target,但是时间复杂度确实\(O(N^2)\),时间复杂度太高,因此我 ...
- 剑指 Offer 57. 和为s的两个数字
本题 题目链接 题目描述 我的题解 双指针 思路分析 因为该数组是递增数组,所以我们可以用双指针法. 声明指针left 和 right分别指向数组的头(数组下标为0)和尾(数组下标为length-1) ...
- [剑指Offer]41.和为S的两个数字 VS 和为S的连续正数序列
[剑指Offer]41 和为S的两个数字 VS 和为S的连续正数序列 Leetcode T1 Two Sum Given an array of integers, return indices of ...
- 【剑指Offer】和为S的两个数字 解题报告(Python)
[剑指Offer]和为S的两个数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- 剑指 Offer 57 - II. 和为s的连续正数序列 + 双指针 + 数论
剑指 Offer 57 - II. 和为s的连续正数序列 Offer_57_2 题目描述 方法一:暴力枚举 package com.walegarrett.offer; /** * @Author W ...
- 《剑指offer》和为S的两个数字
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:
- 【Java】 剑指offer(57-1) 和为s的两个数字
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它 ...
- Go语言实现:【剑指offer】和为S的两个数字
该题目来源于牛客网<剑指offer>专题. 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 对应每个测试案 ...
- 剑指offer系列45---和为s的两个数字
[题目]输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, package com.exe9.offer; /** * [题目]输入一个递增排序的数组和一个数字S,在数组中 ...
随机推荐
- 关于KMP算法的理解
上次因为haipz组织的比赛中有道题必须用到KMP算法,因此赛后便了解了下它,在仔细拜读了孤~影神牛的文章之后有种茅塞顿开的感觉,再次ORZ. 附上链接http://www.cnblogs.com/y ...
- LA3902 Network (树上dfs)
题目链接:点击打开链接 题意:n台机器连成一个树状网络,其中叶节点是客户端,其他节点是服务器,目前有一台服务器s正在提供服务.让你在其他服务器上也安排同样的服务,使得每台客户端到最近服务器的距离不超过 ...
- hdu2157 How many ways??
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...
- Codeforces #6241 div2 C. Orac and LCM (数学)
题意:给你一个数列,求所有子序列对的\(lcm\),然后求这些所有\(lcm\)的\(gcd\). 题解:我们对所有数分解质因数,这里我们首先要知道一个定理: 对于\(n\)个数,假如某个质数\( ...
- 关于TCP和UDP的通俗理解
TCP和UDP是网络基础,很多公司面试也都会问到,今天我在这里,根据大神们的讲解,自己总结借鉴一下. 首先,先提一个问题:英雄联盟是TCP还是UDP? 这个问题对于游戏玩家,可能大多数人都没有想过.一 ...
- Linux 驱动框架---input子系统框架
前面从具体(Linux 驱动框架---input子系统)的工作过程学习了Linux的input子系统相关的架构知识,但是前面的学习比较实际缺少总结,所以今天就来总结一下输入子系统的架构分层,站到远处来 ...
- QUIC协议和HTTP3.0技术研究
QUIC:基于UDP的安全可靠的HTTP/2传输协议 摘要 QUIC(Quick UDP Internet Connection)是一个新的基于UDP的管线化技术和安全传输协议. QUIC提供: 和H ...
- Pycharm无法import caffe
这里是首先建立在读者可以在终端导入而无法在Pycharm中导入的情况下的: 参考链接(问题的最后一个回答) 选用了虚拟环境的python作为解释器, 但由于caffe的特殊性, 依然没有导入, 原因就 ...
- wifi IP address scanner on macOS
wifi IP address scanner on macOS Nmap Network Scanning https://nmap.org/book/inst-macosx.html https: ...
- Flutter & Scaffold & multiple floatingActionButton
Flutter & Scaffold & multiple floatingActionButton demo import 'package:flutter/material.dar ...