升序数据中找到二元组为固定之和

1:题目描述

输入一个递增排序的数组和一个数字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]

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

2:题目分析

  这是一道找到目标和二元组的数组问题,暴力方法时间复杂度很高,我们不得不遍历n^2的次数才能找到目标二元组,但是如果我们能够利用好给的条件的话,那么这道题将很简单!题目中说明数组是递增的,那么如何利用尼?

  我们可以固定数组中最大值和最小值,如果这两个之和大于目标值,说明最大值太大了,只能取次大值;如果这两个之和小于目标值,说明这两个数太小了,只能增大较小值,为什么不能说增加较大值尼?因为较大值就是从右向左过来的,如果能通过增加较大值带到之和等于目标值,则之前过程就会出现过了!

3:代码示例

package JianZhiOffer57;

import java.util.Arrays;

/**
 * @author :dazhu
 * @date :Created in 2020/4/13 11:15
 * @description:升序数据中找到固定之和
 * @modified By:
 * @version: $
 */
public class Main {
    public static void main(String[] args) {
        int[] array = new int[]{10,26,30,31,47,60};
        int tatget = 40;
        Solution solution = new Solution();
        System.out.println(Arrays.toString(solution.twoSum(array,tatget)));
    }
}
class Solution {
    //解题思路
    //首先取出数组首部和尾部的二元组进行判断,二元组之和大于目标值则将第二个元素左移,
    //二元组元素之和小于目标值,则第一个元素右移,直到出现相等即可!
    //这样不会错过,因为只要大于目标值,则只能将第二个元素左移,如果将第一个元素左移,则不可能满足等于目标值
    //因为第一个元素就是从左向右移到,如果能得到目标值则之前已经得到啦!!!
    public int[] twoSum(int[] nums, int target) {
        int leftIndex = 0;
        int rightIndex = nums.length-1;

        int leftNum =0;
        int rightNum =0;
        int sumTemp=0;

        while(true){
            //leftInex>rightIndex意味着全部找到了,也没找到,则要break;
            if(leftIndex>rightIndex){
                break;
            }
            leftNum = nums[leftIndex];
            rightNum = nums[rightIndex];
            sumTemp = leftNum+rightNum;
            //如果正好找到了,则直接break
            if(sumTemp==target){
                break;
            }
            //如果之和大于target,rightNum进行左移
            if(sumTemp>target){
                rightIndex--;
            }
            //如果之和小于target,leftNum进行右移
            if(sumTemp<target){
                leftIndex++;
            }
        }
    return new int[]{leftNum,rightNum};
    }
}

原文地址:https://www.cnblogs.com/dazhu123/p/12690314.html

时间: 2024-10-15 02:27:16

升序数据中找到二元组为固定之和的相关文章

javascript 从一组数据中找到指定的单条数据的方法 by FungLeo

从一组数据中找到指定的单条数据的方法 在一般情况下,我们会要求后端在列表的时候输出一堆列表的JSON数据给我们,然后我们把这堆数据循环,就能在前端上显示列表了. 而我们在内容页的时候,则要求输出一个内容页的JSON数据给我们,我们就可以做内容页了. 但是,有时候,数据并不是特别复杂,我们可能需要从列表的数据中指定其中的单条数据.怎么做呢? 标准答案,find方法 var json = [{"id":1,"name":"张三"},{"id

数据逻辑结构 的 二元组表示法

转自:https://blog.csdn.net/qq_35733751/article/details/80444757 对于数据的逻辑结构还有一种二元组表示法,下面是二元组表示方法. 逻辑结构二元组表示方法:B = (D , R)B——数据结构D——数据元素的集合R——D上二元关系的集合   在上面这种二元组表示方法中,B就是一种数据结构, 用上面的二元组来表示B这种数据结构时,就是由数据元素的集合D和D中的二元关系的集合R组成的,通过这句话,我们可以明白:D=di|1≤i≤n,n≥0, 数

主客体二元组是个十分靠近世界的本质的数据结构

我最近有个感悟,就是有方向的二元组.通过对一个有方向的主客体二元组记录集合的解释可以表现出任意的树结构图结构. 这个二元组是常驻内存的,随时变更随时生效,xml或db纯粹用来持久化数据.这个二元组是中心,其它都是附属. 挺巧合的,Dictionary<key,value>这种对象刚好是个有方向的二元组集合. jint这个javascript引擎就是用Dictionary<key,value>来解释javascript的的 而且事实证明效率不是低而是更高,人家根本就没低效啊,事实是是

堆的应用(1000个数据中找最大的前K个元素,堆排序)

(1)从1000个数据中找到k个最大数据 首先看到这个题时,可能会想到先将这1000个数据进行降序排序,即取出的前k个元素最大.时间复杂度为O(N^2),使得程序效率低. 如何解决这个问题呢?我们的堆就派上用场喽! 解题思路: 可先创建一个数组topK[k],将100w中的前k个数据放入数组topK中,将topK中的数据建小堆,则可保证堆的第一个元素是最小的,将第k个元素与堆中第一个元素比较,若大于,则交换.对堆进行重新建小堆,取第k+1个元素与堆中第一个元素比较,以此类推,直至100w-k个元

Java读取excel指定sheet中的各行数据,存入二维数组,包括首行,并打印

1. 读取 //读取excel指定sheet中的各行数据,存入二维数组,包括首行 public static String[][] getSheetData(XSSFSheet sheet) throws IOException { String[][] testArray = new String[sheet.getPhysicalNumberOfRows()][]; for(int rowId =0;rowId<sheet.getPhysicalNumberOfRows();rowId++)

CAD从二制流数据中加载图形(com接口)

主要用到函数说明: _DMxDrawX::ReadBinStream 从二制流数据中加载图形,详细说明如下: 参数 说明 VARIANT varBinArray 二制流数据,是个byte数组 BSTR sPassword 图纸密码.没有密码,传空字符串 LONG lReadContent 加载内容,如果全部加载,传16777215,十六进制0xFFFFFF c#代码实现如下: 1 2 3 4 5 6 7 8 9 string sFileName = "G:\12345.dwg";   

东南大学借“大数据”助丁肇中找到暗物质存在的新证据

近日,诺贝尔奖得主.美籍华人物理学家丁肇中领导的阿尔法磁谱仪项目,在欧洲核子研究中心公布了最新研究成果,进一步显示暗物质可能存在.这一成果发表在最新一期美国<物理评论快报>上,再次让世界轰动. 据了解,丁肇中主持的AMS实验通过收集宇宙射线,依靠云计算和大数据处理,来寻找暗物质留下的证据,其中一个重要的线索就是正电子,而捕捉这个线索的就是AMS. AMS迄今已运行40多个月,共搜集了540亿个宇宙射线数据.它从410亿个宇宙射线数据中捕捉到1000万个电子和正电子. 东南大学计算机科学与工程学

因素空间理论在大数据中的应用——汪培庄

因素空间理论在大数据中的应用 汪培庄 辽宁工程技术大学 (在大数据与数据科学进展主题论坛上的发言稿,经过整理) 我国数据与机器智能科学工作者肩负着引领大数据时代浪潮的重任,这是关乎我们能否顺利实现中国梦的大事.无论多困难,我们一定要争取走向前列.作为在信息革命领域里头曾经撕杀过的一名老兵,我曾经打造一个理论,就等这一天来接受新的考验,这个理论就是因素空间.       一.因素空间的历史贡献   87年7月,日本学者山川烈在东京召开的国际模糊系统大会展厅里摆着一台机器,明确写着FUZZY COM

深入理解空间搜索算法 ——数百万数据中的瞬时搜索

转自 干货|深入理解空间搜索算法 ——数百万数据中的瞬时搜索 2017-05-01 10:50 全球人工智能:专注为AI开发者提供全球最新AI技术动态和社群交流.用户来源包括:北大.清华.中科院.复旦.麻省理工.卡内基梅隆.斯坦福.哈佛.牛津.剑桥等世界名校的AI技术硕士.博士和教授:以及谷歌.腾讯.百度.脸谱.微软.华为.阿里.海康威视.滴滴.英伟达等全球名企的AI开发者和AI科学家. 文章来源:medium 编译:孙菁 上图为全球138,000个热门地点的R-tree的可视化图示 我这个人沉