【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; } };
相關推薦
【LeetCode】41. 缺失的第一個正數 結題報告 (C++)
題目描述: 給定一個未排序的整數陣列,找出其中沒有出現的最小的正整數。 示例 1: 輸入: [1,2,0] 輸出: 3 示例 2: 輸入: [3,4,-1,1] 輸出: 2 示例 3: 輸入: [7,8,9,11,12] 輸出: 1 說明: 你的演
【LeetCode】152. 乘積最大子序列 結題報告 (C++)
原題地址:https://leetcode-cn.com/problems/maximum-product-subarray/description/ 題目描述: 給定一個整數陣列 nums ,找出一個序列中乘積最大的連續子序列(該序列至少包含一個數)。 示例 1: 輸入: [2,3
【LeetCode】128. 最長連續序列 結題報告 (C++)
原題地址:https://leetcode-cn.com/problems/longest-consecutive-sequence/description/ 題目描述: 給定一個未排序的整數陣列,找出最長連續序列的長度。 要求演算法的時間複雜度為 O(n)。 示例: 輸入: [
【LeetCode】115. 不同的子序列 結題報告 (C++)
原題地址:https://leetcode-cn.com/problems/distinct-subsequences/description/ 題目描述: 給定一個字串 S 和一個字串 T,計算在 S 的子序列中 T 出現的個數。 一個字串的一個子序列是指,通過刪除一些(也可以不刪除)
【LeetCode】220. 存在重複元素 III 結題報告 (C++)
原題地址:https://leetcode-cn.com/problems/contains-duplicate-iii/submissions/ 題目描述: 給定一個整數陣列,判斷陣列中是否有兩個不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的絕對值最大為 t,
【LeetCode】233. 數字1的個數 結題報告 (C++)
原題地址:https://leetcode-cn.com/problems/number-of-digit-one/ 題目描述: 給定一個整數 n,計算所有小於等於 n 的非負整數中數字 1 出現的個數。 示例: 輸入: 13 輸出: 6 解釋: 數字 1 出現在以下數字
【LeetCode】229. 求眾數 II 結題報告 (C++)
原題地址:https://leetcode-cn.com/problems/majority-element-ii/submissions/ 題目描述: 給定一個大小為 n 的陣列,找出其中所有出現超過 ⌊ n/3 ⌋ 次的元素。 說明: 要求演算法的時間複雜度為 O(n),空間複雜度為
【LeetCode】1131. 分割回文串 結題報告 (C++)
題目描述: 給定一個字串 s,將 s 分割成一些子串,使每個子串都是迴文串。 返回 s 所有可能的分割方案。 示例: 輸入: "aab" 輸出: [ ["aa","b"], ["a","a","b"] ] 解題方案: 本題是回溯法的題目,回溯法總是
【LeetCode】282. 給表示式新增運算子 結題報告 (C++)
原題地址:https://leetcode-cn.com/problems/expression-add-operators/ 題目描述: 給定一個僅包含數字 0-9 的字串和一個目標值,在數字之間新增二元運算子(不是一元)+、- 或 * ,返回所有能夠得到目標值的表示式。 示例 1:
【LeetCode】187. 重複的DNA序列 結題報告 (C++)
題目描述: 所有 DNA 由一系列縮寫為 A,C,G 和 T 的核苷酸組成,例如:“ACGAATTCCG”。在研究 DNA 時,識別 DNA 中的重複序列有時會對研究非常有幫助。 編寫一個函式來查詢 DNA 分子中所有出現超多一次的10個字母長的序列(子串)。 示例
【LeetCode】92. 反轉連結串列 II 結題報告 (C++)
題目描述: 反轉從位置 m 到 n 的連結串列。請使用一趟掃描完成反轉。 說明: 1 ≤ m ≤ n ≤ 連結串列長度。 示例: 輸入: 1->2->3->4->5->NULL, m = 2, n = 4 輸出: 1->4-&g
【leetcode】21. 合併兩個有序連結串列(C解答)
題目: 將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。 示例: 輸入:1->2->4, 1->3->4 輸出
【LeetCode】60. 第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 輸
【LeetCode】88. 合併兩個有序陣列
題目連結:https://leetcode-cn.com/problems/merge-sorted-array/description/ 題目描述 給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。
【LeetCode】21 合併兩個有序連結串列
將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。 示例: 輸入:1->2->4, 1->3->4 輸出:1->1->2->3->4->4 解題思路: 1
【LeetCode】215. 陣列中的第K個最大元素 結題報告 (C++)
原題地址:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/submissions/ 題目描述: 在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不
【LeetCode】88 合併兩個有序陣列
給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。 說明: 初始化 nums1 和 nums2 的元素數量分別為 m 和 n。 你可以假設 nums1 有足夠的空間(空間大小大於或等於 m +n)來儲存 num
【LeetCode】 23 合併k個有序連結串列
解題思路: 1 之前的某道題有將兩個有序連結串列排序的解法,思路很簡單,可以拿來直接用。 2 利用分治的思想,分根據下標來分;兩兩合併,再兩兩合併…以此類推。 程式碼: /** * Definition for singly-linked list. * public
【3】Django建立第一個專案
天地所以能長且久者,以其不自生,故能長生。 ——老子《道德經》 寫在前面:Django在學習的過程中,我們會參考官方文件,從兩部分進行講解,第一部分主要是一個入門專案的搭建開發,第二部分是核心的講解。過程中可能會有一些配置或者技術點不會明確的講解,入門專案要求是能寫出程式碼、能跟著文件寫出專案,能瞭解