日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[LeetCode] Single Number

發(fā)布時(shí)間:2024/9/5 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [LeetCode] Single Number 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Given an array of integers, every element appears?twice?except for one. Find that single one.

Note:

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

?

感謝cnblog博主feiling,這篇博客一方面參考了feiling的博客,也加入了自己的一些看法。

[解題思路]

要求線性時(shí)間復(fù)雜度,同時(shí)空間復(fù)雜度為O(1),即只允許開常數(shù)個(gè)空間。

最直接的思路是對每一個(gè)元素嘗試查找是否有重,如果沒有重,就返回。

class Solution { public:int singleNumber(int A[], int n) {// IMPORTANT: Please reset any member data you declared, as// the same Solution instance will be reused for each test case.int i = 0, j = 0;int ans = 0;for(i = 0;i < n;i++){for(j = 0;j < n;j++){if(i == j)continue;else if(A[i] == A[j])break;else continue;}if(j == n)return A[i];}} };

不幸的是雖然是o(n2)的時(shí)間復(fù)雜度,但是還是超時(shí)了。于是乎就得想一個(gè)o(n)的算法。

o(n)的算法只能是線性掃描一遍,可能的相法是位運(yùn)算。對于異或來說:

1. 異或運(yùn)算是可交換,即 a ^ b = b ^ a

2. 0 ^ a = a

那么如果對所有元素做異或運(yùn)算,其結(jié)果為那個(gè)出現(xiàn)一次的元素,理解是a1 ^ a2 ^ ....,可以將所有相同元素交換至相鄰位置,首先運(yùn)算相同元素,則會產(chǎn)生(n - 1)/2個(gè)0異或積,剩余一個(gè)單一元素,他們的異或積為這個(gè)單一元素自己,得解。

1 public class Solution {2 public int singleNumber(int[] A) {3 // Note: The Solution object is instantiated only once and is reused by each test case.4 if(A == null || A.length == 0){5 return 0;6 }7 int result = A[0];8 9 for(int i = 1; i < A.length; i++){ 10 result = result ^ A[i]; 11 } 12 return result; 13 } 14 }

本題擴(kuò)展

1.一個(gè)數(shù)組中有兩個(gè)元素只出現(xiàn)一次,其他所有元素都出現(xiàn)兩次,求這兩個(gè)只出現(xiàn)一次的元素

[解題思路]

將數(shù)組所有元素都進(jìn)行異或得到一個(gè)不為0的結(jié)果,根據(jù)這個(gè)結(jié)果中的不為0的某一位將數(shù)組分成兩組

將兩組中的元素進(jìn)行異或,如兩個(gè)數(shù)組的異或值都不為0,則得到最后結(jié)果

?

2.一個(gè)數(shù)組中有一個(gè)元素只出現(xiàn)1次,其他所有元素都出現(xiàn)k次,求這個(gè)只出現(xiàn)1次的元素

[解題思路]

當(dāng)k為偶數(shù)時(shí),同lss

當(dāng)k為奇數(shù)時(shí),將數(shù)組中每個(gè)元素的每一位相加mod k,得到結(jié)果即位出現(xiàn)1次的元素,時(shí)間復(fù)雜度O(nlen),空間復(fù)雜度為O(1)

轉(zhuǎn)載于:https://www.cnblogs.com/changchengxiao/p/3413294.html

總結(jié)

以上是生活随笔為你收集整理的[LeetCode] Single Number的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。