最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java二分查找算法與數(shù)組處理的應(yīng)用實(shí)例

 更新時(shí)間:2022年07月20日 09:34:23   作者:風(fēng)鈴聽(tīng)雨~  
二分查找法,又叫做折半查找法,它是一種效率較高的查找方法。數(shù)組對(duì)于每一門(mén)編程語(yǔ)言來(lái)說(shuō)都是重要的數(shù)據(jù)結(jié)構(gòu)之一,當(dāng)然不同語(yǔ)言對(duì)數(shù)組的實(shí)現(xiàn)及處理也不盡相同。Java 語(yǔ)言中提供的數(shù)組是用來(lái)存儲(chǔ)固定大小的同類(lèi)型元素

1.特殊數(shù)組的特征值

題目描述

思路詳解

看到本題,首先思考需要排序,然后查找,這里為了效率采用二分查找。

假設(shè)定義x=(left+riht)/ 2,每次查找到nums中第一個(gè)大于等于X的元素下標(biāo),判斷大于等于X的個(gè)數(shù)與X的關(guān)系,進(jìn)行分情況修改左右邊界。

代碼與結(jié)果

class Solution {
    public int specialArray(int[] nums) {
        Arrays.sort(nums);
        int n = nums.length;
        int left = 0, right = n;
        while (left <= right) {
            int x = (left + right) >> 1;
            int idx = binarySearch(nums, x); // nums中第一個(gè)大于等于x的元素位置
            if (x == n - idx) {
                return x;
            } else if (x < n - idx) { // 大于等于x的元素太多了,所以下一輪搜索要增大x的取值范圍
                left = x + 1;
            } else { // 反之,減少x的取值范圍
                right = x - 1;
            }
        }
        return -1;
    }
    private static int binarySearch(int[] nums, int x) {
        int left = 0, right = nums.length - 1;
        while (left <= right) {
            int mid = (left + right) >> 1;
            int val = nums[mid];
            if (val >= x) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return left;
    }
}

2.在D天內(nèi)送達(dá)包裹的能力

題目描述

思路詳解

假設(shè)當(dāng)船的運(yùn)載能力為 x 時(shí),我們可以在days 天內(nèi)運(yùn)送完所有包裹,那么只要運(yùn)載能力大于 x,我們同樣可以在 days 天內(nèi)運(yùn)送完所有包裹:我們只需要使用運(yùn)載能力為 x時(shí)的運(yùn)送方法即可。

由于必須按照數(shù)組weights 中包裹的順序進(jìn)行運(yùn)送,因此我們從數(shù)組 weights 的首元素開(kāi)始遍歷,將連續(xù)的包裹都安排在同一天進(jìn)行運(yùn)送。當(dāng)這批包裹的重量大于運(yùn)載能力 x 時(shí),我們就需要將最后一個(gè)包裹拿出來(lái),安排在新的一天,并繼續(xù)往下遍歷。當(dāng)我們遍歷完整個(gè)數(shù)組后,就得到了最少需要運(yùn)送的天數(shù)。

代碼與結(jié)果

class Solution {
    public int shipWithinDays(int[] weights, int days) {
        // 確定二分查找左右邊界
        int left = Arrays.stream(weights).max().getAsInt(), right = Arrays.stream(weights).sum();
        while (left < right) {
            int mid = (left + right) / 2;
            // need 為需要運(yùn)送的天數(shù)
            // cur 為當(dāng)前這一天已經(jīng)運(yùn)送的包裹重量之和
            int need = 1, cur = 0;
            for (int weight : weights) {
                if (cur + weight > mid) {
                    ++need;
                    cur = 0;
                }
                cur += weight;
            }
            if (need <= days) {
                right = mid;
            } else {
                left = mid + 1;
            }
        }
        return left;
    }
}

3.咒語(yǔ)和藥水的成功對(duì)數(shù)

題目描述

思路詳解

本題采用二分查找的方法進(jìn)行解題。

首先我們對(duì)藥水的數(shù)組進(jìn)行排序,其次我們遍歷咒術(shù)數(shù)組,利用二分查找的思想在藥水?dāng)?shù)組中查找,與成功值最接近的數(shù)值,存入到答案數(shù)組中。

有個(gè)小細(xì)節(jié),判斷時(shí)候1l * power * potions[mid] < success 這樣做是為了把數(shù)字轉(zhuǎn)化為long型,避免錯(cuò)誤哦。

代碼與結(jié)果

class Solution {
    public int[] successfulPairs(int[] spells, int[] potions, long success) {
        int[] ans = new int[spells.length];
        Arrays.sort(potions);
        for (int i = 0; i < spells.length; i++) {
            int power = spells[i];
            int left = 0;
            int right = potions.length - 1;
            while (left <= right) {
                int mid = left + (right - left) / 2;
                if (1l * power * potions[mid] < success) {
                    left = mid + 1;
                } else {
                    right = mid - 1;
                }
            }
            ans[i] = potions.length - left;
        }
        return ans;
    }
}

總結(jié)

今天主要集中在二分查找的應(yīng)用,希望小伙伴通過(guò)今天的習(xí)題可以體驗(yàn)到二分查找的好處,可以更加熟練的應(yīng)用哦!?。?!

到此這篇關(guān)于Java二分查找算法與數(shù)組處理的應(yīng)用實(shí)例的文章就介紹到這了,更多相關(guān)Java二分查找與數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java設(shè)計(jì)模式之策略模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java設(shè)計(jì)模式之策略模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    策略模式是對(duì)算法的封裝,把一系列的算法分別封裝到對(duì)應(yīng)的類(lèi)中,并且這些類(lèi)實(shí)現(xiàn)相同的接口,相互之間可以替換。接下來(lái)通過(guò)本文給大家分享Java設(shè)計(jì)模式之策略模式,感興趣的朋友一起看看吧
    2017-08-08
  • java如何從地址串中解析提取省市區(qū)(完美匹配中國(guó)所有地址)

    java如何從地址串中解析提取省市區(qū)(完美匹配中國(guó)所有地址)

    這篇文章主要給大家介紹了關(guān)于java如何從地址串中解析提取省市區(qū)的相關(guān)資料,通過(guò)這個(gè)方法可以完美匹配中國(guó)所有地址,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • IDEA的Web項(xiàng)目右鍵無(wú)法創(chuàng)建Servlet問(wèn)題解決辦法

    IDEA的Web項(xiàng)目右鍵無(wú)法創(chuàng)建Servlet問(wèn)題解決辦法

    這篇文章主要介紹了IDEA的Web項(xiàng)目右鍵無(wú)法創(chuàng)建Servlet問(wèn)題解決辦法的相關(guān)資料,在IDEA中新建Servlet時(shí)發(fā)現(xiàn)缺失選項(xiàng),可以通過(guò)在pom.xml文件中添加servlet依賴(lài)解決,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • Spring Boot產(chǎn)生環(huán)形注入的解決方案

    Spring Boot產(chǎn)生環(huán)形注入的解決方案

    這篇文章主要介紹了Spring Boot產(chǎn)生環(huán)形注入的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SSM框架整合之Spring+SpringMVC+MyBatis實(shí)踐步驟

    SSM框架整合之Spring+SpringMVC+MyBatis實(shí)踐步驟

    大家都知道Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架,本文主要介紹三大框架的整合包含spring和mybatis的配置文件,還有spring-mvc的配置文件的詳細(xì)介紹,通過(guò)項(xiàng)目實(shí)踐步驟給大家詳細(xì)介紹,感興趣的朋友一起看看吧
    2021-06-06
  • Java中方法作為參數(shù)傳遞的方式

    Java中方法作為參數(shù)傳遞的方式

    這篇文章主要介紹了Java如何讓方法作為參數(shù)傳遞,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Java8實(shí)現(xiàn)FTP及SFTP文件上傳下載

    Java8實(shí)現(xiàn)FTP及SFTP文件上傳下載

    這篇文章主要介紹了Java8實(shí)現(xiàn)FTP及SFTP文件上傳下載,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 詳解Java數(shù)組擴(kuò)容縮容與拷貝的實(shí)現(xiàn)和原理

    詳解Java數(shù)組擴(kuò)容縮容與拷貝的實(shí)現(xiàn)和原理

    這篇文章主要帶大家學(xué)習(xí)數(shù)組的擴(kuò)容、縮容及拷貝,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 基于Java SSM框架實(shí)現(xiàn)簡(jiǎn)易的評(píng)教系統(tǒng)

    基于Java SSM框架實(shí)現(xiàn)簡(jiǎn)易的評(píng)教系統(tǒng)

    這篇文章主要介紹了通過(guò)Java SSM框架實(shí)現(xiàn)一個(gè)簡(jiǎn)易的評(píng)教系統(tǒng)的示例代碼,文中的代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-02-02
  • JAVA中 redisTemplate 和 jedis的配合使用操作

    JAVA中 redisTemplate 和 jedis的配合使用操作

    這篇文章主要介紹了JAVA中 redisTemplate 和 jedis的配合使用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02

最新評(píng)論

兖州市| 库伦旗| 武汉市| 公安县| 广灵县| 聂荣县| 商丘市| 卢龙县| 方城县| 山西省| 察雅县| 和林格尔县| 瑞金市| 新巴尔虎右旗| 综艺| 德江县| 宁河县| 江门市| 山阳县| 淮北市| 兰坪| 彭泽县| 武冈市| 玉屏| 集安市| 博兴县| 深圳市| 盐亭县| 黄龙县| 肇源县| 四平市| 修武县| 永州市| 资阳市| 怀化市| 宁明县| 内乡县| 巩义市| 荥阳市| 鸡西市| 鄂尔多斯市|