首页 > 其他分享 >力扣---剑指 Offer 57. 和为s的两个数字

力扣---剑指 Offer 57. 和为s的两个数字

时间:2023-03-31 19:22:08浏览次数:32  
标签:p2 p1 target nums int res 57 Offer ---

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。

 

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]
示例 2:

输入:nums = [10,26,30,31,47,60], target = 40
输出:[10,30] 或者 [30,10]
 

限制:

1 <= nums.length <= 10^5
1 <= nums[i] <= 10^6

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/he-wei-sde-liang-ge-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

这道题大概算是两数之和的进阶吧。所以两数之和的方法也可以做。

只不过如果利用题目给的递增的条件,可以用双指针同时从两边开始遍历,指针指向元素的和大于target,右指针左移,否则左指针右移。如果等于,直接返回。

哈希表:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Set<Integer> set = new HashSet<>();
        int[] res = new int[2];
        for (int x : nums) {
            if (set.contains(target - x)) {
                res[0] = x;
                res[1] = target - x;
                break;
            }
            set.add(x);
        }
        return res;
    }
}

 

 双指针:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int p1 = 0;
        int p2 = nums.length - 1;
        while (p1 < p2) {
            int tem = nums[p1] + nums[p2];
            if (tem > target) {
                p2 --;
            } else if (tem < target) {
                p1 ++;
            } else {
                break;
            }
        }
        return new int[] {nums[p1], nums[p2]};
    }
}

 

标签:p2,p1,target,nums,int,res,57,Offer,---
From: https://www.cnblogs.com/allWu/p/17277274.html

相关文章

  • 有关斐波那契查找-Java实现
    其实对于斐波那契查找,是一种新的查找思想,对与其实用性我持怀疑态度;主要就是,黄金风分割得思想;而斐波那契数列正好符合这一特性;其中的思想不过多赘述;主要事可以培养算法的思想;1/***2*fib查找3*@paramnum目标排查找数组4*@paramnumSearch目标数......
  • coc-nvim
    配置文件:CocConfig~/.config/nvim/coc-settings.jsoncoc-settings.json{"languageserver":{"ccls":{"command":"ccls","filetypes":["c","cpp","hpp","......
  • nvim-dap
    localdap=require("dap")localcmd=os.getenv('HOME')..'/tool/debug/codelldb/adapter/codelldb'dap.adapters.codelldb=function(on_adapter)--Thisasksthesystemforafreeportlocaltcp=vim.loop.new_tcp()tc......
  • 力扣---剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。 示例:输入:nums= [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4]也是正确的答案之一。 提示:0<=nums.length<=500000<=nums[i]<=10000来源:力扣(LeetCode)链接:ht......
  • mongodb--数据库操作与集合操作
    一、数据库操作1、新建数据库和切换数据库useDATABASE_NAME--DATABASE_NAME创建数据库的名字--如果刚创建完数据库,使用查看命令后没有的话,其实因为里面没有数据,所以才看不到2、查看所有数据库--查看所有数据库showdbs--查看当前数据库db 3、删除数据库--删除......
  • python写入文件时,编码方式为utf-8,在pycharm种正常显示中文,但是用excel打开就乱码
    python写入文件时,编码方式为utf-8,在pycharm种正常显示中文,但是用excel打开就乱码解决办法:explore.to_csv(resultfile,encoding='utf-8-sig')encoding='utf-8-sig’因为python编码方式为utf-8,但是是无BOM格式的,excel软件,其对于utf-8编程方式,只支持有BOM格式的,所以会出现中文......
  • LIDC-IDRI肺结节项目 -- 预处理数据集
    实战参考代码:代码一、路径、参数配置(lung.conf)lidc_dicom_path:LIDC_IDRI数据集原始位置 image_path,mask_path:保存处理后的含有结节的肺部图像和掩码图像路径clean_path_image,clean_path_mask:保存处理后的不含有结节的肺部图像和掩码图像路径meta_path:保存结节元......
  • Codeforces Gym 103931F - Forest of Magic(时间轴分块+线段树合并)
    一个巨烦的时间轴分块做法,有点类似于P2137Gty的妹子树先考虑静态的情况。看上去就一脸线段树合并对吧?一次修改的操作对一个点\(x\)贡献可以写成\(k·dep_x+b\)的形式,开两棵线段树合并维护一次项和零次项系数即可。由于静态问题可做,因此考虑时间轴分块。设阈值\(B\),每\(B......
  • MATLA 5G工具箱---
    基于MATLABR2022b版软件学习!DeepLearningforWirelessCommunications视频链接:https://www.mathworks.com/videos/deep-learning-for-wireless-communications-1625082196426.htmlGood morning, ladies and gentlemen. My name is Houman Zarrinkoub. I ......
  • Python的match-case语法
    Python3.10版本在2021年10月发布,新增了match-case语法。其实就是对应别的开发语言的switch-case语法。 例子defhttp_error(status):matchstatus:case400:print("Badrequest")case404:print("Notfound")case......