給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。(1):將list排序,兩兩一組比較,若不相等,則返回第乙個數字;否則就返回最後乙個數字;說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,1] 輸出: 1 示例 2:
輸入: [4,1,2,1,2] 輸出: 4
(2):將list按奇數偶數字置拆分成兩個set求差集,則差集中值就是最終的結果。
# -*- coding: utf-8 -*-
'''問題簡述:
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了兩次,
找出那個只出現一次的元素。
基本思路:
將陣列排序,兩兩一對元素肯定相等,若不相等,則返回第乙個不相等元素;
或者最後乙個元素就是只出現一次的數字。
'''class
solution()
:'''
input: list
output: int
'''defsinglenumber
(self,nums)
: nums.sort(
)# 排序
iflen
(nums)==1
:# 若僅包含乙個元素,則一定是僅出現一次的元素
return nums[0]
i=0while i<
len(nums)-2
:# 假設len(nums) = 5,那麼最後一組下標為2就該停止,所以i=0,2,故 i< 5-2=3即可。
if nums[i]
!= nums[i+1]
:return nums[i]
else
: i = i+
2return nums[-1
]# 假若沒找到,則最後乙個元素就是不重複元素。
if __name__ ==
'__main__'
: ilist =[4
,1,2
,3,1
,2,3
] solu = solution(
) res = solu.singlenumber(ilist)
print
('單個數字為:\n'
,res)
# -*- coding: utf-8 -*-
'''問題簡述:
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了兩次,
找出那個只出現一次的元素。
基本思路:
給陣列排序,按照奇數偶數將list分成兩個集合,之後求兩個集合的差集就是孤零零的元素。
'''class
solution()
:'''
input: list
output: int
'''defsinglenumber
(self,nums)
: nums.sort(
)# 排序
res =
list
(set
(nums[::
2])-
set(nums[1:
:2])
)return res[0]
if __name__ ==
'__main__'
: ilist =[4
,1,2
,3,1
,2,3
] solu = solution(
) res = solu.singlenumber(ilist)
print
('單個數字為:\n'
,res)
a. 在第一種方法中:注意list長度為1的特殊情況;i下標索引的範圍ib. 在集合中,不能通過集合進行索引,即set[i]。這種索引方式是錯誤的。因此集合是無序的,不能索引。報錯資訊為:typeerror: 『set』 object is not subscriptable。即型別錯誤,不能出現索引。只能通過list()方法將其轉化成列表才可進行索引。 只出現一次的數
給定乙個整數陣列 nums,其中恰好有兩個元素只出現一次,其他所有元素均出現兩次。找出只出現一次的那兩個元素。示例 給定 nums 1,2,1,3,2,5 返回 3,5 注意 結果的順序並不重要,對於上面的例子 5,3 也是正確答案。你的演算法應該具有線性複雜度,你能否僅使用恆定的空間複雜度來實現它...
只出現一次的數
問題描述 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。解決思路 將陣列中元素全部異或,根據異或特點,出現兩次的元素異或後結果為0,陣列全部異或之後的結果就是只出現一次的那個元素。實現 int singlenumber vector int n...
只出現一次的數
問題 有n個數,其中只有乙個數出現一次,其他的都出現兩次,求這個數 空間複雜度為常數 全部xor起來即可 include includeusing namespace std int main printf d n xor sum return 0 1231 3 1 51 2 3 2 3 inclu...