真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何編寫兩數(shù)之和的算法代碼

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

創(chuàng)新互聯(lián)建站2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都網(wǎng)站建設、網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元仁布做網(wǎng)站,已為上家服務,為仁布各地企業(yè)和個人服務,聯(lián)系電話:13518219792

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

示例:

輸入: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)——常數(shù)時間
 * O(logN)——對數(shù)時間
 * O(N)——線性時間
 * O(N*N)——2次指數(shù)時間
 * O(N*N*N)——3次指數(shù)時間
 *
 *給定一個整數(shù)數(shù)組 nums 和一個整數(shù)目標值 target,請你在該數(shù)組中找出 和為目標值 的那 兩個 整數(shù),并返回它們的數(shù)組下標。
 *
 * 你可以假設每種輸入只會對應一個答案。但是,數(shù)組中同一個元素在答案里不能重復出現(xiàn)。
 *
 * 你可以按任意順序返回答案。
 *
 * 來源:力扣(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
 * 著作權歸領扣網(wǎng)絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。
 *
 */
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,將數(shù)組值作為K,索引作為V存入Map
     * @param array
     * @param target
     * @return
     */
    private int[] findTwoIntBySum2(int[] array, int target){
        int[] resArray = null;

        //建立HashMap,存儲 K存值,V存索引
        Map 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存索引
        Map 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;
    }
}

到此,關于“如何編寫兩數(shù)之和的算法代碼”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
名稱欄目:如何編寫兩數(shù)之和的算法代碼
URL地址:http://weahome.cn/article/pshooc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部