zoukankan      html  css  js  c++  java
  • 剑指offer--第57题 和为s的数字

    第57题 和为s的数字

    题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
    思路 首先应该都会想到用双层for循环的思路遍历数组来查找,但是这样的时间复杂度高。可以采用首尾同时进行,定义两个指针标志。具体过程可以见下面的例子。

    自己写的Low代码

    import java.util.ArrayList;
    public class Solution {
        public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
             ArrayList<Integer> list = new ArrayList<Integer>();
            if(array==null||array.length==0||sum<array[0]) {
            	return list;
            }
            //如果存在的话
            for(int i=0;i<array.length;i++) {
            	for(int j = i+1;j<array.length;j++) {
            		if(array[i]+array[j]==sum) {
            			list.add(array[i]);
            			list.add(array[j]);
            			return list;
            		}
            		
            		if(array[i]+array[j]>sum) {
            			break;
            		}
            	}
            	
            }
            return list;
        }
    }
    

    根据剑指Offer提供的思路

    import java.util.ArrayList;
    public class Solution {
        public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
              ArrayList<Integer> list = new ArrayList<Integer>();
        if(array==null||array.length==0||sum<array[0]) {
        	return list;
        }
       int i=0;
       int j=array.length-1;
       //两边同时进行;
       while(i<j) {
    	   if(array[i]+array[j]==sum) {
    			list.add(array[i]);
    			list.add(array[j]);
    			return list;
    		}else if(array[i]+array[j]<sum) {
    		   i++;
    	   }else {
    		   j--;
    	   }
       }
        return list;
        }
    }
    

    主要区别在于时间复杂度上,两边同时进行的思路很妙。

    多思考,多尝试。
  • 相关阅读:
    类实现接口(Example5_11)
    PyTorch之Checkpoint机制解析
    PyTorch之BN核心参数详解
    PyTorch之分布式操作Barrier
    PyTorch之对类别张量进行onehot编码
    PyTorch之具体显存占用分析
    Pytorch之SpatialShiftOperation的5种实现策略
    无密码远程桌面设置
    人生三个境界
    研华工控机设置上电自启动
  • 原文地址:https://www.cnblogs.com/LynnMin/p/9292211.html
Copyright © 2011-2022 走看看