1. 程式人生 > >【LeetCode】41. 缺失的第一個正數 結題報告 (C++)

【LeetCode】41. 缺失的第一個正數 結題報告 (C++)

題目描述:

給定一個未排序的整數陣列,找出其中沒有出現的最小的正整數。

示例 1:

輸入: [1,2,0]
輸出: 3

示例 2:

輸入: [3,4,-1,1]
輸出: 2

示例 3:

輸入: [7,8,9,11,12]
輸出: 1

說明:

你的演算法的時間複雜度應為O(n),並且只能使用常數級別的空間。

解題思路:

考慮到找出其中沒有出現的最小的正整數。

最小的正整數如果存在,然後對陣列進行排序,我們期望它會在什麼地方?

考慮到這一點,本該出現的最小正整數沒有出現,通過這種反向思維,可以尋找到最小正整數。

將數組裡的元素放在期望的位置上。。。。

所有位置完成之後,順序遍歷,並輸出與期望不符的位置下標。。。。

一種hash方式,nums[i] 元素應該在nums[i] -1 的位置上。一次交換達不到目的,所以使用while 一直到不滿足條件為止。

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
         for (int i = 0; i < nums.size(); i++) {
             /* 一個hash   nums[i] 元素應該在nums[i] -1 的位置上
                一次交換達不到目的,所以使用while 一直到不滿足條件為止
             */
             while (nums[i] > 0 && nums[i] <= nums.size() && nums[ nums[i]-1 ] != nums[i])
                    swap(nums[i], nums[nums[i] -1 ]);
        }
        for (int i = 0; i < nums.size(); i++) 
            if (nums[i] != (i + 1))      return i + 1;

        return nums.size() + 1;
    }
};

相關推薦

LeetCode41. 缺失第一正數 報告 (C++)

題目描述: 給定一個未排序的整數陣列,找出其中沒有出現的最小的正整數。 示例 1: 輸入: [1,2,0] 輸出: 3 示例 2: 輸入: [3,4,-1,1] 輸出: 2 示例 3: 輸入: [7,8,9,11,12] 輸出: 1 說明: 你的演

LeetCode152. 乘積最大子序列 報告 (C++)

原題地址:https://leetcode-cn.com/problems/maximum-product-subarray/description/ 題目描述: 給定一個整數陣列 nums ,找出一個序列中乘積最大的連續子序列(該序列至少包含一個數)。 示例 1: 輸入: [2,3

LeetCode128. 最長連續序列 報告 (C++)

原題地址:https://leetcode-cn.com/problems/longest-consecutive-sequence/description/ 題目描述: 給定一個未排序的整數陣列,找出最長連續序列的長度。 要求演算法的時間複雜度為 O(n)。 示例: 輸入: [

LeetCode115. 不同的子序列 報告 (C++)

原題地址:https://leetcode-cn.com/problems/distinct-subsequences/description/ 題目描述: 給定一個字串 S 和一個字串 T,計算在 S 的子序列中 T 出現的個數。 一個字串的一個子序列是指,通過刪除一些(也可以不刪除)

LeetCode220. 存在重複元素 III 報告 (C++)

原題地址:https://leetcode-cn.com/problems/contains-duplicate-iii/submissions/ 題目描述: 給定一個整數陣列,判斷陣列中是否有兩個不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的絕對值最大為 t,

LeetCode233. 數字1的個數 報告 (C++)

原題地址:https://leetcode-cn.com/problems/number-of-digit-one/ 題目描述: 給定一個整數 n,計算所有小於等於 n 的非負整數中數字 1 出現的個數。 示例: 輸入: 13 輸出: 6  解釋: 數字 1 出現在以下數字

LeetCode229. 求眾數 II 報告 (C++)

原題地址:https://leetcode-cn.com/problems/majority-element-ii/submissions/ 題目描述: 給定一個大小為 n 的陣列,找出其中所有出現超過 ⌊ n/3 ⌋ 次的元素。 說明: 要求演算法的時間複雜度為 O(n),空間複雜度為

LeetCode1131. 分割回文串 報告 (C++)

題目描述: 給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回 s 所有可能的分割方案。 示例: 輸入: "aab" 輸出: [   ["aa","b"],   ["a","a","b"] ] 解題方案: 本題是回溯法的題目,回溯法總是

LeetCode282. 給表示式新增運算子 報告 (C++)

原題地址:https://leetcode-cn.com/problems/expression-add-operators/ 題目描述: 給定一個僅包含數字 0-9 的字串和一個目標值,在數字之間新增二元運算子(不是一元)+、- 或 * ,返回所有能夠得到目標值的表示式。 示例 1:

LeetCode187. 重複的DNA序列 報告 (C++)

題目描述: 所有 DNA 由一系列縮寫為 A,C,G 和 T 的核苷酸組成,例如:“ACGAATTCCG”。在研究 DNA 時,識別 DNA 中的重複序列有時會對研究非常有幫助。 編寫一個函式來查詢 DNA 分子中所有出現超多一次的10個字母長的序列(子串)。 示例

LeetCode92. 反轉連結串列 II 報告 (C++)

題目描述: 反轉從位置 m 到 n 的連結串列。請使用一趟掃描完成反轉。 說明: 1 ≤ m ≤ n ≤ 連結串列長度。 示例: 輸入: 1->2->3->4->5->NULL, m = 2, n = 4 輸出: 1->4-&g

leetcode21. 合併兩有序連結串列(C解答)

題目: 將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。  示例: 輸入:1->2->4, 1->3->4 輸出

LeetCode60. 第k排列

題目連結:https://leetcode-cn.com/problems/permutation-sequence/description/ 題目描述 給出集合 [1,2,3,…,n],其所有元素共有 n! 種排列。 按大小順序列出所有排列情況,並一一標記,當 n = 3

LeetCode 779. 第K語法符號

遞迴 題目 在第一行我們寫上一個 0。接下來的每一行,將前一行中的0替換為01,1替換為10。 給定行數 N 和序數 K,返回第 N 行中第 K個字元。(K從1開始) 例子: 輸入: N = 1, K = 1 輸出: 0 輸入: N = 2, K = 1 輸

LeetCode88. 合併兩有序陣列

題目連結:https://leetcode-cn.com/problems/merge-sorted-array/description/ 題目描述 給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。

LeetCode21 合併兩有序連結串列

將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。 示例: 輸入:1->2->4, 1->3->4 輸出:1->1->2->3->4->4 解題思路: 1

LeetCode215. 陣列中的第K最大元素 報告 (C++)

原題地址:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/submissions/ 題目描述: 在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不

LeetCode88 合併兩有序陣列

給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。 說明: 初始化 nums1 和 nums2 的元素數量分別為 m 和 n。 你可以假設 nums1 有足夠的空間(空間大小大於或等於 m +n)來儲存 num

LeetCode 23 合併k有序連結串列

解題思路: 1 之前的某道題有將兩個有序連結串列排序的解法,思路很簡單,可以拿來直接用。 2 利用分治的思想,分根據下標來分;兩兩合併,再兩兩合併…以此類推。 程式碼: /** * Definition for singly-linked list. * public

3Django建立第一專案

天地所以能長且久者,以其不自生,故能長生。 ——老子《道德經》 寫在前面:Django在學習的過程中,我們會參考官方文件,從兩部分進行講解,第一部分主要是一個入門專案的搭建開發,第二部分是核心的講解。過程中可能會有一些配置或者技術點不會明確的講解,入門專案要求是能寫出程式碼、能跟著文件寫出專案,能瞭解