給定一個包含 0, 1, 2, ..., n
中 n 個數的序列,找出 0 .. n 中沒有出如今序列中的那個數。python
示例 1:算法
輸入: [3,0,1] 輸出: 2
示例 2:數組
輸入: [9,6,4,2,3,5,7,0,1] 輸出: 8
說明: 你的算法應具備線性時間複雜度。你可否僅使用額外常數空間來實現?3.解題dom
#沒出現的數字確定總和剪去給你的列表就是那個數字
class Solution: def missingNumber(self, nums: List[int]) -> int: nums_sum = 0 for a in range(len(nums)+1): nums_sum += a return nums_sum-sum(nums)
給定一個非空數組,返回此數組中第三大的數。若是不存在,則返回數組中最大的數。要求算法時間複雜度必須是O(n)。spa
示例 1:code
輸入: [3, 2, 1] 輸出: 1 解釋: 第三大的數是 1.
示例 2:排序
輸入: [1, 2] 輸出: 2 解釋: 第三大的數不存在, 因此返回最大的數 2 .
示例 3:索引
輸入: [2, 2, 3, 1] 輸出: 1 解釋: 注意,要求返回第三大的數,是指第三大且惟一出現的數。 存在兩個值爲2的數,它們都排第二。
#這題會出現的狀況有4種 #長度爲1時候,最大就是他本是 #長度爲2時候,最大就是他的最大 #長度3的時候,爲他最小值及第三大 #長度4咱們就對他進行排序取倒數第三就能夠了
class Solution: def thirdMax(self, nums: List[int]) -> int: nums_set = set(nums) if len(nums_set) == 1: #第一種 return nums[0] elif len(nums_set) ==3: #第二種 return min(nums_set) elif len(nums_set) ==2: #第三種 return max(nums_set) else: #第四種 nums_list = list(nums_set) nums_list.sort() return nums_list[-3]
在一個給定的數組nums
中,老是存在一個最大元素 。leetcode
查找數組中的最大元素是否至少是數組中每一個其餘數字的兩倍。get
若是是,則返回最大元素的索引,不然返回-1。
示例 1:
輸入: nums = [3, 6, 1, 0]
輸出: 1 解釋: 6是最大的整數, 對於數組中的其餘整數, 6大於數組中其餘元素的兩倍。6的索引是1, 因此咱們返回1.
**示例 2:**
輸入: nums = [1, 2, 3, 4] 輸出: -1 解釋: 4沒有超過3的兩倍大, 因此咱們返回 -1.
### 2.解題 ```python 解題思路:跟着題意走就行了,主要是利用列表的copy
class Solution: def dominantIndex(self, nums: List[int]) -> int: if len(nums) >=2: nums_1= nums.copy() nums_1.sort() max_1 = nums_1[-1] max_2 = nums_1[-2] if max_1 >= 2*max_2: return nums.index(max_1) else: return -1 else: return 0