当前位置: 首页 > news >正文

五华网站建设请输入搜索关键词

五华网站建设,请输入搜索关键词,开一家互联网公司需要多少钱,工商局网站如何做网登优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个下标从1开始的整数数组numbers&#xff0c;该数组已按非递减顺序排列&#xff0c;请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是numbers[index1]和numbers[index2]&#xff0c;则1 < ind…

优质博文:IT-BLOG-CN

一、题目

给你一个下标从1开始的整数数组numbers,该数组已按非递减顺序排列,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是numbers[index1]numbers[index2],则1 <= index1 < index2 <= numbers.length。以长度为2的整数数组[index1, index2]的形式返回这两个整数的下标index1index2。你可以假设每个输入 只对应唯一的答案 ,而且你不可以重复使用相同的元素。你所设计的解决方案必须只使用常量级的额外空间。

示例 1:
输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解释:27之和等于目标数9。因此index1 = 1, index2 = 2。返回[1, 2]

示例 2:
输入:numbers = [2,3,4], target = 6
输出:[1,3]
解释:24之和等于目标数6。因此index1 = 1, index2 = 3。返回[1, 3]

示例 3:
输入:numbers = [-1,0], target = -1
输出:[1,2]
解释:-10之和等于目标数-1。因此index1 = 1, index2 = 2。返回[1, 2]

2 <= numbers.length <= 3 * 104
-1000 <= numbers[i] <= 1000
numbers非递减顺序排列
-1000 <= target <= 1000
仅存在一个有效答案

二、代码

【1】使用二分查找法: 通过target - numbers[i]得到目标值,然后根据二分查找目标值,二分查找小于目标值,取右边进行递归,否则取左边的数据进行递归。

class Solution {public int[] twoSum(int[] numbers, int target) {// 通过 target - numbers[i] 得到目标值,然后根据二分查找目标值,二分查找小于目标值,取右边进行递归,否则取左边的数据进行递归。int left = 0, right = 0, val = 0, mid = 0;for (int i = 0; i < numbers.length; i++) {left = i + 1;right = numbers.length - 1;// 需要查找的值val = target - numbers[i];// 中间数据while(left <= right) {mid = (right - left) / 2 + left;// 循环退出条件if (numbers[mid] == val) {return new int[] {i + 1 , mid + 1};}// 如果中间值大于目标值,二分查找左边数组,否则查找右边数组if (numbers[mid] > val) {right = mid;} else {left = mid + 1;}}}return new int[]{-1,-1};}
}

时间复杂度: O(nlog⁡n)其中n是数组的长度。需要遍历数组一次确定第一个数,时间复杂度是O(n),寻找第二个数使用二分查找,时间复杂度是O(log⁡n),因此总时间复杂度是O(nlog⁡n)
空间复杂度: O(1)

【2】双指针: 初始时两个指针分别指向第一个元素位置和最后一个元素的位置。每次计算两个指针指向的两个元素之和,并和目标值比较。如果两个元素之和等于目标值,则发现了唯一解。如果两个元素之和小于目标值,则将左侧指针右移一位。如果两个元素之和大于目标值,则将右侧指针左移一位。移动指针之后,重复上述操作,直到找到答案。

class Solution {public int[] twoSum(int[] numbers, int target) {// 思想:将左右指针累加后,如果sum > target 右指针-1,sum < target 左指针 + 1int left = 0 , right = numbers.length - 1;while (left < right) {int sum = numbers[left] + numbers[right];if (sum == target) {return new int[]{left + 1 , right + 1};} else if (sum > target){--right;}else {++left;}}return new int[]{-1,-1};}
}

时间复杂度: O(n)其中n是数组的长度。两个指针移动的总次数最多为n次。
空间复杂度: O(1)

http://www.cadmedia.cn/news/6655.html

相关文章:

  • 网站建设实训报告册杭州今天查出多少阳性
  • 江苏启安建设集团有限公司网站大型的营销型网站
  • 建设银行 网站用户变成个人用户世界十大搜索引擎排名
  • 文创产品设计思路成都百度seo推广
  • 幼儿园网站建设奖励方案室内设计网站
  • 网站建设怎么学习石家庄seo排名外包
  • 网页小游戏有哪些重庆seo网站推广优化
  • 怎么把自己的网站做自适应网站重庆seo标准
  • 中国金湖建设网站企点qq官网
  • 济南美赞网站建设公司宁波网站制作与推广价格
  • 承德百度网站建设推广app有哪些
  • 网站通栏怎么做南京seo优化培训
  • 微信营销和网站建设网站制作的流程是什么
  • 网站做签到功能互联网营销师怎么考
  • 如何宣传商务网站怎样弄一个自己的平台
  • 长春电商网站建设哪家专业如何成为百度广告代理商
  • 中国人做外贸网站都卖什么手续在线磁力搜索引擎
  • 长沙做网站seo优化外包百度提交网站
  • 自己建设网站需要服务器2023年10月疫情还会严重吗
  • 注册账号验证码平台google关键词优化
  • 大庆加油app老版本网络营销推广及优化方案
  • 百度网站推广方案seo技术顾问
  • 关键词优化排名工具一键优化大师下载
  • 什么是网络营网络销售好做吗谁做过免费seo培训
  • 建设银行的网站是多少seo网站关键词优化方式
  • 网站制作培训一般要多少钱seo优化方式
  • 解释网站为什么这样做seo研究中心骗局
  • 网页设计图片大小规范小红书seo软件
  • 淘宝联盟网站怎么建设上海网站seo优化
  • 查询公司营业执照的网站百度自媒体平台