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

Java C++ 算法題解leetcode1608特殊數(shù)組特征值

 更新時(shí)間:2022年09月14日 09:07:25   作者:AnjaVon  
這篇文章主要為大家介紹了Java C++ 算法題解拓展leetcode1608特殊數(shù)組特征值實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

題目要求

思路一:枚舉 + 二分

  • 逐一枚舉值域內(nèi)的所有值,然后二分判斷是否合法。

Java

class Solution {
    public int specialArray(int[] nums) {
        Arrays.sort(nums);
        int n = nums.length;
        for (int x = 0; x <= nums[n - 1]; x++) { // 枚舉
            int l = 0, r = n -1 ;
            while (l < r) { // 二分
                int m = l + r >> 1;
                if (nums[m] >= x)
                    r = m;
                else
                    l = m + 1;
            }
            if (nums[r] >= x && x == n - r)
                return x;
        }
        return -1;
    }
}
  • 時(shí)間復(fù)雜度:O(n log? n),排序復(fù)雜度為O(n log? n),枚舉次數(shù)為值域范圍C=1000,所以找答案的復(fù)雜度為O(C log n)
  • 空間復(fù)雜度:O(log? n))

C++

class Solution {
public:
    int specialArray(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        int n = nums.size();
        for (int x = 0; x <= nums[n - 1]; x++) { // 枚舉
            int l = 0, r = n -1 ;
            while (l < r) { // 二分
                int m = (l + r) >> 1;
                if (nums[m] >= x)
                    r = m;
                else
                    l = m + 1;
            }
            if (nums[r] >= x && x == n - r)
                return x;
        }
        return -1;
    }
};
  • 時(shí)間復(fù)雜度:O(n log ?n),排序復(fù)雜度為O(n log? n),枚舉次數(shù)為值域范圍C=1000,所以找答案的復(fù)雜度為O(C log? n)
  • 空間復(fù)雜度:O(log? n)

思路二:二分枚舉

二分枚舉+二分判定是否合法;

為了方便把判斷合法單獨(dú)寫成函數(shù)getResgetResgetRes。

Java

class Solution {
    int[] nums;
    public int specialArray(int[] num) {
        this.nums = num;
        Arrays.sort(nums);
        int l = 0, r = nums[nums.length - 1];
        while (l < r) {
            int m = l + r >> 1;
            if (getRes(m) <= m)
                r = m;
            else
                l = m + 1;
        }
        return getRes(r) == r ? r : -1;
    }
    int getRes(int x) {
        int n = nums.length, l = 0, r = n - 1;
        while (l < r) {
            int m = l + r >> 1;
            if (nums[m] >= x)
                r = m;
            else
                l = m + 1;
        }
        return nums[r] >= x ? n - r : 0;
    }
}
  • 時(shí)間復(fù)雜度:O(n log? n),排序復(fù)雜度為O(n log ?n),二分找答案所以復(fù)雜度為O(log ?C log ?n)
  • 空間復(fù)雜度:O(log ?n)

C++

  • 注意全局變量和輸入變量需要有差別……
class Solution {
public:
    vector<int> nums;
    int specialArray(vector<int>& num) {
        this->nums = num;
        sort(nums.begin(), nums.end());
        int l = 0, r = nums[nums.size() - 1];
        while (l < r) {
            int m = (l + r) >> 1;
            if (getRes(m) <= m)
                r = m;
            else
                l = m + 1;
        }
        return getRes(r) == r ? r : -1;
    }
    int getRes(int x) {
        int n = nums.size(), l = 0, r = n - 1;
        while (l < r) {
            int m = (l + r) >> 1;
            if (nums[m] >= x)
                r = m;
            else
                l = m + 1;
        }
        return nums[r] >= x ? n - r : 0;
    }
};
  • 時(shí)間復(fù)雜度:O(n log? n),排序復(fù)雜度為O(n log ?n),二分找答案所以復(fù)雜度為O(log? C log? n)
  • 空間復(fù)雜度:O(log? n)

思路三:倒序枚舉

  • 因?yàn)橹涤虮容^小,所以可以直接從值域最后開(kāi)始倒著枚舉;
  • 預(yù)處理出每個(gè)值出現(xiàn)的次數(shù),然后記錄當(dāng)前合法合法數(shù)值的數(shù)量與當(dāng)前數(shù)值進(jìn)行比較。

Java

class Solution {
    public int specialArray(int[] nums) {
        int[] cnt = new int[1001];
        for (int x : nums)
            cnt[x]++;
        for (int i = 1000, tot = 0; i >= 0; i--) {
            tot += cnt[i]; // 數(shù)量
            if (i == tot)
                return i;
        }
        return -1;
    }
}
  • 時(shí)間復(fù)雜度:O(n+C)
  • 空間復(fù)雜度:O(C)

C++

class Solution {
public:
    int specialArray(vector<int>& nums) {
        int cnt[1001];
        memset(cnt, 0, sizeof(cnt));
        for (int x : nums)
            cnt[x]++;
        for (int i = 1000, tot = 0; i >= 0; i--) {
            tot += cnt[i];
            if (i == tot)
                return i;
        }
        return -1;
    }
};
  • 時(shí)間復(fù)雜度:O(n+C)
  • 空間復(fù)雜度:O(C)

以上就是Java C++ 算法題解leetcode1608特殊數(shù)組特征值的詳細(xì)內(nèi)容,更多關(guān)于Java C++ 算法特殊數(shù)組特征值的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 二叉樹(shù)先根(先序)遍歷的改進(jìn)

    二叉樹(shù)先根(先序)遍歷的改進(jìn)

    這篇文章主要介紹了二叉樹(shù)先根(先序)遍歷的改進(jìn),有需要的朋友可以參考一下
    2014-01-01
  • C++將CBitmap類中的圖像保存到文件的方法

    C++將CBitmap類中的圖像保存到文件的方法

    這篇文章主要介紹了C++將CBitmap類中的圖像保存到文件的方法,涉及C++導(dǎo)出資源文件的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • QT實(shí)戰(zhàn)之打開(kāi)最近文檔功能的實(shí)現(xiàn)

    QT實(shí)戰(zhàn)之打開(kāi)最近文檔功能的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)打開(kāi)最近文檔功能,并實(shí)現(xiàn)基本的新建、打開(kāi)、保存、退出、幫助等功能,感興趣的可以動(dòng)手嘗試一下
    2022-06-06
  • 一起來(lái)了解c語(yǔ)言的str函數(shù)

    一起來(lái)了解c語(yǔ)言的str函數(shù)

    這篇文章主要為大家詳細(xì)介紹了c語(yǔ)言的str函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C++ 壓縮文件及文件夾方法 使用zlib開(kāi)源庫(kù)

    C++ 壓縮文件及文件夾方法 使用zlib開(kāi)源庫(kù)

    下面小編就為大家分享一篇C++ 壓縮文件及文件夾方法 使用zlib開(kāi)源庫(kù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • C++?折疊參數(shù)包詳解(悄然增強(qiáng)編程效率)

    C++?折疊參數(shù)包詳解(悄然增強(qiáng)編程效率)

    折疊參數(shù)就是一個(gè)參數(shù)包, 代表是多個(gè)未知,tuple元組就是一個(gè)折疊參數(shù)的使用,這篇文章主要介紹了C++?折疊參數(shù)包悄然增強(qiáng)編程效率,需要的朋友可以參考下
    2023-05-05
  • QT5實(shí)現(xiàn)簡(jiǎn)單的TCP通信的實(shí)現(xiàn)

    QT5實(shí)現(xiàn)簡(jiǎn)單的TCP通信的實(shí)現(xiàn)

    本文主要介紹了QT5實(shí)現(xiàn)簡(jiǎn)單的TCP通信的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C++代碼實(shí)現(xiàn)五子棋小游戲

    C++代碼實(shí)現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了C++代碼實(shí)現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Qt6+QML實(shí)現(xiàn)Windows屏幕錄制功能

    Qt6+QML實(shí)現(xiàn)Windows屏幕錄制功能

    Qt6提供了很多豐富的多媒體支持類,本文將為大家詳細(xì)介紹一下Qt6如何結(jié)合QML實(shí)現(xiàn)Windows屏幕錄制功能,文中的示例代碼簡(jiǎn)潔易懂,有需要的小伙伴可以參考一下
    2025-04-04
  • C++ Boost Serialization庫(kù)超詳細(xì)獎(jiǎng)金額

    C++ Boost Serialization庫(kù)超詳細(xì)獎(jiǎng)金額

    Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開(kāi)發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱
    2022-12-12

最新評(píng)論

肃宁县| 庐江县| 泉州市| 武宣县| 尖扎县| 大城县| 定边县| 镇原县| 忻城县| 全南县| 长武县| 当阳市| 浑源县| 来安县| 青海省| 丘北县| 镶黄旗| 化德县| 泰宁县| 阳高县| 洮南市| 邯郸市| 芜湖市| 南城县| 郑州市| 易门县| 峨眉山市| 安平县| 昌宁县| 安丘市| 和静县| 渭源县| 颍上县| 璧山县| 大悟县| 泰州市| 迁西县| 崇仁县| 永兴县| 定边县| 曲沃县|