zoukankan      html  css  js  c++  java
  • [编程题] lc167两数之和 II

    [编程题] lc:167. 两数之和 II - 输入有序数组

    题目描述

    ![image-20200721115631557]([编程题] lc[剑指 Offer 14_ I剪绳子(动态规划).assets/image-20200721115631557.png)

    输入输出例子

    见上

    思路

    方法1、暴力匹配

    时间复杂度O(n的2次方)

    Java代码

    class Solution {
        public int cuttingRope(int n) {
    
            //情况1:对于两种极端情况先讨论
            if(n==1 || n==2){return 1;}
            //情况2:对于n=3的时候,也是只能分成了2*1一种结果
            if(n==3){return 2;}
            //情况3:当n>3的时候,可分的情况就多了。如下
            int a = n/3;
            int b = n%3;
            //3.1如果是b=0
            if(b==0){
                return (int)Math.pow(3,a);
            }else if(b==1){
                return (int)Math.pow(3,a-1)*2*2; //3.2如果是b=1,把最后一个3和1 分为2*2的结果
            }else{
                return (int)Math.pow(3,a)*2;   //如果余数b=2的话,就直接乘在后边,不分了
            }
        }
    }
    

    输出的效率:

    ![image-20200721115730293]([编程题] lc[剑指 Offer 14_ I剪绳子(动态规划).assets/image-20200721115730293.png)

    方法2:借助hashMap来减少时间复杂度

    时间复杂度O(n)

    Java代码

     //方法2:使用哈希表来减少时间复杂度(O(n))
        public int[] twoSum1(int[] numbers, int target) {
            //备查的字典表
            Map<Integer,Integer> hashMap = new HashMap<>();  //参数1存储数组元素值,参数2存储其数组元素索引
            //把当前的数组元素按照键值对存入map
            for(int i=0;i<numbers.length;i++){
                hashMap.put(numbers[i],i);
            }
    
            for(int i=0;i<numbers.length;i++){
                int cur = numbers[i];
                int other = target-cur;
                if(hashMap.containsKey(other)){
                    return new int[]{i+1,hashMap.get(other)+1};
                }
            }
            //实在没找到的话,返回这个,本质题目设置是一定能找到的呀~
            return new int[]{0,0};
        }
    

    输出:

    ![image-20200721115846282]([编程题] lc[剑指 Offer 14_ I剪绳子(动态规划).assets/image-20200721115846282.png)

  • 相关阅读:
    JS-字符串截取方法slice、substring、substr的区别
    Vue中computed和watch的区别
    Vue响应式原理及总结
    JS实现深浅拷贝
    JS中new操作符源码实现
    点击页面出现爱心效果
    js判断对象是否为空对象的几种方法
    深入浅出js实现继承的7种方式
    es6-class
    详解 ESLint 规则,规范你的代码
  • 原文地址:https://www.cnblogs.com/jiyongjia/p/13354316.html
Copyright © 2011-2022 走看看