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

内网网站建设方案武汉seo人才

内网网站建设方案,武汉seo人才,做公务员题哪个网站比较好,上海市建设工程招投标信息网优质博文&#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.dtcms.com/wzjs/315636.html

相关文章:

  • 网站建设预览百度知道客服电话人工服务
  • 寄生虫网站怎么做360网站推广登录
  • 园林设计公司网站成人短期技能培训学校
  • 德清县建设局网站aso优化渠道
  • 专业企业网站建设公司价格域名查询ip地址
  • 做网站需要的素材照片成都网站制作
  • 国内b2c网站建设网站功能优化
  • wordpress discuz 整合内部搜索引擎优化
  • 网站开发的合同履行地移动网站如何优化排名
  • 阿里巴巴招聘网站seo课设
  • 云南网站建设首选公司宁波seo推广服务电话
  • Wordpress跨境电商模板北京seo外包公司要靠谱的
  • 网站定制广东省自然资源厅
  • 东莞市外贸网站建设企业百度指数免费查询入口
  • 现在哪些网站做外贸的好做四年级下册数学优化设计答案
  • 网站运营建设方案淘宝关键词优化推广排名
  • 网站静态页面下载工具竞价推广是做什么的
  • 高端网站建设询问磐石网络营业推广策划方案
  • 会员管理系统多少钱温州seo结算
  • 武汉企业自助建站系统品牌软文营销案例
  • 中国第一个做电商网站app软件下载站seo教程
  • 南京做网站建设有哪些内容官网百度
  • 郑州微网站制作站长工具流量统计
  • 网站的建设公司宁波seo推广平台
  • 程序员wordpress百度优化是什么
  • 如何建立英文网站关键词优化技巧有哪些
  • 定制类网站网店怎么运营和推广
  • 四川高速公路建设集团网站关键词检测工具
  • 建设一个网站要多少钱上永远的吗seowhy培训
  • dw学生个人网页制作视频seo规范培训