Leetcode每日一题:167. 两数之和 II - 输入有序数组(2023.7.8 C++)

news2024/9/21 8:54:48

目录

167. 两数之和 II - 输入有序数组

题目描述:

实现代码与解析:

暴力(超时)

双指针

原理思路:

二分

原理思路:


167. 两数之和 II - 输入有序数组

题目描述:

        给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列  ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。

以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1  index2

你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

你所设计的解决方案必须只使用常量级的额外空间。

示例 1:

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

示例 2:

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

示例 3:

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

实现代码与解析:

暴力(超时)

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        vector<int> res(2);
        for (int i = 0; i < numbers.size(); i++)
        {
            if (numbers[i] > target / 2 + 1) break;
            for (int j = i + 1; j < numbers.size(); j++)
                {
                    if (numbers[i] + numbers[j] == target)
                    {
                        res[0] = i + 1;
                        res[1] = j + 1;
                    }
                }
        }
        return res;
    }
};

 显然我们没有用到有序的这个性质。

双指针

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int i = 0, j = numbers.size() - 1;
        while(i < j)
        {
            if (numbers[i] + numbers[j] > target) j--;
            else if (numbers[i] + numbers[j] < target) i++;
            else 
            {
                return {i + 1, j + 1};
            }
        }
        return {};
    }
};

原理思路:

        根据有序的性质,numbers[i] + numbers[j] > target 说明和大了,我们固定左端,右端向左移动让和变小。numbers[i] + numbers[j] < target 说明和小了,我们固定右端,左端向右移动让和变大。

二分

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {

        for (int i = 0; i < numbers.size(); i++)
        {
            int l = i + 1;
            int r = numbers.size() - 1;
            while(l <= r)
            {
                int mid = ((r - l) >> 1) + l;
                if (numbers[mid] > target - numbers[i]) r = mid - 1;
                else if (numbers[mid] < target - numbers[i]) l = mid + 1;
                else return {i + 1, mid + 1};
            }
        }
        return {};
    }
};

原理思路:

        固定一端,然后二分查找另一段,二分比较简单,就不再解释了。

Leetcode:704. 二分查找(C++)_Cosmoshhhyyy的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/733217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL性能瓶颈定位慢查询

目录 1 性能优化的思路2 引言3 MySQL慢查询日志3.1 慢查询参数3.2 开启慢查询日志&#xff08;临时&#xff09;3.3 开启慢查询日志&#xff08;永久&#xff09;3.4 慢查询测试 4 MySQL性能分析 EXPLAIN4.1 概述4.2 EXPLAIN字段介绍4.2.1 id字段4.2.2 select_type 与 table字段…

Leetcode-每日一题【21.合并两个有序链表】

题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4]输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 []输出&#xff1a;…

1.Git使用技巧-常用命令1

Git使用技巧-常用命令 文章目录 Git使用技巧-常用命令一、git 创建仓库demo 二、本地仓库常用命令提交详解git commitgit commit --amend 三、 推送到远程分支git push 总结参考 一、git 创建仓库 创建远端仓库&#xff1a; git init – bare // 创建远端裸仓库&#xff1b; 远…

【华为机试】HJ16 购物单详解+完整源代码示例

从毕业到入职&#xff0c;忙于各种事情&#xff0c;所以博客一直也没有空更新。从入职到现在差不多整三个月了&#xff0c;刚刚在比亚迪这边转正。目前干的工作涉及到开发的工作不是很多&#xff0c;但是又怕之前的技能荒废了。所以最近有个想法&#xff0c;再把C算法和数据结构…

Android Zygote 启动流程

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: Android系统包含netd、servicemanager、surfaceflinger、zygote、media、installd、bootanimation 等基本服务&#xff0c;具体作用请看下图。 Android…

English Learning - L3 作业打卡 Lesson8 Day60 2023.7.5 周三

English Learning - L3 作业打卡 Lesson8 Day60 2023.7.5 周三 引言Part 1 总结&#x1f349;句1: 11 years ago, when I lost my legs, I had no idea what to expect.成分划分连读爆破语调 &#x1f349;句2: But if you ask me today, if I would ever want to change my si…

java+Mysql 图书管理系统(idea)

目录 前言 部分界面截图 登录界面 注册界面 图书管理界面 关于我们界面 部分代码 登录界面 数据库工具类 前言 jdk 版本&#xff1a;openjdk version "11.0.12" MySql版本&#xff1a;5.7.40 加&#xff08;vx&#xff1a;lixuanzi0521&#xff09;帮调试 …

递推--Fibonacci数列 II

描述 众所周知&#xff0c;Fibonacci数列是一个著名数列。它的定义是&#xff1a; 本题要求采用第二种方法&#xff1a;递推。 输入描述 每行一个整数 i &#xff0c;表示 Fibonacci 数列的第i项。 i ≤ 100000 对比前一题&#xff0c;本题的数据规模是 十万 &#xff01; …

css基础知识十九:让Chrome支持小于12px 的文字方式有哪些?区别?

一、背景 Chrome 中文版浏览器会默认设定页面的最小字号是12px&#xff0c;英文版没有限制 原由 Chrome 团队认为汉字小于12px就会增加识别难度 中文版浏览器 与网页语言无关&#xff0c;取决于用户在Chrome的设置里&#xff08;chrome://settings/languages&#xff09;把…

应用层:电子邮件

1.应用层&#xff1a;电子邮件 笔记来源&#xff1a; 湖科大教书匠&#xff1a;应用层概述 湖科大教书匠&#xff1a;电子邮件 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 电子邮件系统采用客户/服务器方式&#xff08;C/S&#xff09; 电子邮件…

计算机视觉 3D点云极简概述

一、概述 点云是表示 3D 坐标系中的数字 3D 物理对象或空间的点数据库。它由数百万或者更多个单独的测量点组成,具有 x、y 和 z 坐标。3D点云是物体的高精度数字记录。点云用于生成用于 3D 建模的 3D 网格和其他模型。包括医学成像、3D 打印、制造、建筑、3D 游戏和虚拟现实 (…

NSS [NISACTF 2022]babyupload

NSS [NISACTF 2022]babyupload 源码给了提示&#xff0c;/source路径 访问后得到一个文件&#xff0c;是源码 from flask import Flask, request, redirect, g, send_from_directory import sqlite3 import os import uuidapp Flask(__name__)SCHEMA """CRE…

基于matlab使用PointNet深度学习进行点云分类(附源码)

一、前言 此示例演示如何训练 PointNet 网络以进行点云分类。 点云数据由各种传感器获取&#xff0c;例如激光雷达、雷达和深度摄像头。这些传感器捕获场景中物体的3D位置信息&#xff0c;这对于自动驾驶和增强现实中的许多应用非常有用。例如&#xff0c;区分车辆和行人对于…

【优选算法题练习】day1

文章目录 一、283. 移动零1.题目简介2.解题思路3.代码4.运行结果 二、1089. 复写零1.题目简介2.解题思路3.代码4.运行结果 三、202. 快乐数1.题目简介2.解题思路3.代码4.运行结果 总结 双指针&#xff1a; 一、283. 移动零 1.题目简介 283. 移动零 给定一个数组 nums&#x…

vscode: Unable to determine workspace folder

故障现象&#xff1a; 用vscode的bashdb调试bash 脚本时&#xff0c;出现如下打印&#xff1a; 故障原因&#xff1a; setttings.json中&#xff0c;“cwd”定义目录错误&#xff0c;或者缺少“cwd”定义&#xff1b; 解决办法&#xff1a; 打开settings.json文件&#xff…

SpringBoot+Vue 的在线考试系统

&#x1f495;&#x1f495;作者&#xff1a;程序员徐师兄 个人简介&#xff1a;7 年大厂程序员经历&#xff0c;擅长Java、微信小程序、Python、Android等&#xff0c;大家有这一块的问题可以一起交流&#xff01; 各类成品java毕设 。javaweb&#xff0c;ssh&#xff0c;ssm&…

Python环境搭建秘籍:开发者的黄金组合!

1、vscode下载并安装。 Visual Studio Code - Code Editing. Redefined 2、安装插件。 在vscode中按ctrlshiftx快捷键打开extension的界面。 输入python关键字&#xff0c;注意选择Micorosoft的。 3、创建python代码。 C:\pythoncode\weather.py import wx import request…

tidb之旅——dm工具篇

作者&#xff1a; 有猫万事足 原文来源&#xff1a; https://tidb.net/blog/666ab16d 前言 稳定了tidb的集群&#xff0c;确定了写入热点问题的处理方式&#xff0c;搞好了监控&#xff0c;就要准备接入生产服的写入流量进入tidb集群了。这就轮到了dm工具的出场。这个过程十…

视频行为识别(一)——综述

Deep Neural Networks in Video Human Action Recognition: A Review 本次分享的文章是2023年收录在计算机视觉领域的顶刊“CVPR”&#xff08;级别&#xff1a;视觉类TOP&#xff09;期刊上。该期刊详细信息可关注公众号 AI八倍镜 点击菜单项查询。 论文地址&#xff1a;http…

减法优化器SABO算法优化VMD参数,最小包络熵、样本熵、信息熵、排列熵(适应度函数可自行选择,一键修改)包含MATLAB源代码...

今天给大家带来一期由2023年智能优化算法减法优化器SABO优化VMD的两个参数。关于减法优化器SABO的原理及MATLAB代码的详细介绍大家可以看这篇文章。2023年优化算法之减法平均优化器&#xff0c;matlab代码直接复制&#xff0c;并与灰狼&#xff0c;粒子群算法比较 同样以西储大…