亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何編寫兩數之和的算法代碼

發布時間:2021-10-09 16:10:07 來源:億速云 閱讀:150 作者:iii 欄目:編程語言

這篇文章主要介紹“如何編寫兩數之和的算法代碼”,在日常操作中,相信很多人在如何編寫兩數之和的算法代碼問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何編寫兩數之和的算法代碼”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 的那 兩個 整數,并返回它們的數組下標。

示例:

輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

package com.lau.javabase;

import org.junit.Test;

import java.time.Duration;
import java.time.Instant;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * 時間復雜度排序:
 * O(1)——常數時間
 * O(logN)——對數時間
 * O(N)——線性時間
 * O(N*N)——2次指數時間
 * O(N*N*N)——3次指數時間
 *
 *給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 的那 兩個 整數,并返回它們的數組下標。
 *
 * 你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素在答案里不能重復出現。
 *
 * 你可以按任意順序返回答案。
 *
 * 來源:力扣(LeetCode)
 * 鏈接:https://leetcode-cn.com/problems/two-sum
 *
 * 測試用例:
 * 輸入:nums = [2,7,11,15], target = 9
 * 輸出:[0,1]
 * 解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
 *
 * 來源:力扣(LeetCode)
 * 鏈接:https://leetcode-cn.com/problems/two-sum
 * 著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
 *
 */
public class TwoSumTest {

    @Test
    public void test(){
        int[] array = {1,5,10,9,12};

        Instant start = Instant.now();
        System.out.println("---------1--------");
        int[]resArray = findTwoIntBySum(array, 17);
        Instant end  = Instant.now();
        long timeElapsed = Duration.between(start, end).toNanos(); // 單位為毫秒
        System.out.println("程序1耗時:" + timeElapsed);
        Arrays.stream(resArray).forEach(System.out :: println);

        start = Instant.now();
        System.out.println("---------2--------");
        int[]resArray2 = findTwoIntBySum2(array, 17);
        end  = Instant.now();
        timeElapsed = Duration.between(start, end).toNanos(); // 單位為毫秒
        System.out.println("程序2耗時:" + timeElapsed);
        Arrays.stream(resArray2).forEach(System.out :: println);

        start = Instant.now();
        System.out.println("---------3--------");
        int[]resArray3 = findTwoIntBySum3(array, 17);
        end  = Instant.now();
        timeElapsed = Duration.between(start, end).toNanos(); // 單位為毫秒
        System.out.println("程序3耗時:" + timeElapsed);
        Arrays.stream(resArray3).forEach(System.out :: println);

        start = Instant.now();
        System.out.println("---------4--------");
        int[]resArray4 = findTwoIntBySum4(array, 17);
        end  = Instant.now();
        timeElapsed = Duration.between(start, end).toNanos(); // 單位為毫秒
        System.out.println("程序4耗時:" + timeElapsed);
        Arrays.stream(resArray4).forEach(System.out :: println);
    }

    /**
     * @Description:解法一,兩層遍歷
     * @param array
     * @param target
     * @return
     */
    private int[] findTwoIntBySum(int[] array, int target){
        int[] resArray = null;

        for(int i = 0; i < array.length - 1; i++){
            for(int j = i + 1; j < array.length; j++){
                if(target == array[i] + array[j]){
                    resArray = new int[]{i, j};
                    return resArray;
                }
            }
        }

        return resArray;
    }

    /**
     * @Description:解法二,依托HashMap,將數組值作為K,索引作為V存入Map
     * @param array
     * @param target
     * @return
     */
    private int[] findTwoIntBySum2(int[] array, int target){
        int[] resArray = null;

        //建立HashMap,存儲<k,v> K存值,V存索引
        Map<Integer, Integer> midMap = new HashMap<>();
//        Arrays.stream(array).forEach(s -> );

        for(int i = 0; i < array.length; i++){
            midMap.put(array[i], i);
        }

        for(int i = 0; i < array.length; i++){
           if(Objects.nonNull(midMap.get(target - array[i]))){
               resArray = new int[]{i, midMap.get(target - array[i])};
               return resArray;
           }
        }

        return resArray;
    }

    /**
     * @Description:解法三,兩層遍歷(解法一的變種)
     * @param array
     * @param target
     * @return
     */
    private int[] findTwoIntBySum3(int[] array, int target){
        int[] resArray = null;

        for(int i = 0; i < array.length - 1; i++){
            for(int j = i + 1; j < array.length; j++){
                if(target - array[i] == array[j]){
                    resArray = new int[]{i, j};
                    return resArray;
                }
            }
        }

        return resArray;
    }

    /**
     * @Description:解法四,依托HashMap,一次遍歷即可完成
     * @param array
     * @param target
     * @return
     */
    private int[] findTwoIntBySum4(int[] array, int target){
        int[] resArray = null;

        //建立HashMap,存儲<k,v> K存值,V存索引
        Map<Integer, Integer> midMap = new HashMap<>();
//        Arrays.stream(array).forEach(s -> );

        for(int i = 0; i < array.length; i++){
            if(midMap.containsKey(target - array[i])){
                resArray = new int[]{midMap.get(target - array[i]), i};
                return resArray;
            }

            midMap.put(array[i], i);
        }

        return resArray;
    }
}

到此,關于“如何編寫兩數之和的算法代碼”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

雷州市| 龙里县| 明星| 韶关市| 蕉岭县| 邵阳县| 新密市| 东源县| 永春县| 色达县| 霞浦县| 渭南市| 龙游县| 绥德县| 哈巴河县| 白河县| 顺平县| 枣阳市| 东乌| 二手房| 洪洞县| 伊春市| 宁陵县| 中方县| 资兴市| 碌曲县| 琼结县| 思南县| 赤壁市| 晋江市| 滦平县| 渭南市| 莱阳市| 宁河县| 榆林市| 全椒县| 山东| 潍坊市| 平昌县| 邛崃市| 宜兴市|