国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【LeetCode】260.只出現(xiàn)一次的數(shù)字 III(找出單身狗)

這篇具有很好參考價值的文章主要介紹了【LeetCode】260.只出現(xiàn)一次的數(shù)字 III(找出單身狗)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【LeetCode】260.只出現(xiàn)一次的數(shù)字 III(找出單身狗),LeetCode刷題筆記,leetcode,c語言,學習,筆記

???樊梓慕:個人主頁

???個人專欄:《C語言》《數(shù)據(jù)結(jié)構(gòu)》《藍橋杯試題》

??每一個不曾起舞的日子,都是對生命的辜負。


目錄

前言:

一只單身狗:

兩只單身狗:


前言:

本篇主要講解LeetCode上的經(jīng)典題型:只出現(xiàn)一次的數(shù)字,我匯總了該類問題的兩種情況(一只單身狗、兩只單身狗)并進行分析講解和代碼實現(xiàn),學習完本篇文章你會掌握一種全新的思路:異或法,希望大家多多支持博主創(chuàng)作,博主會持續(xù)帶來更多優(yōu)質(zhì)內(nèi)容??

=========================================================================

GITEE相關代碼:??fanfei_c的倉庫??

=========================================================================

一只單身狗:

LeetCode原題鏈接:??只出現(xiàn)一次的數(shù)字??

題目:給你一個?非空?整數(shù)數(shù)組?nums?,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次。找出那個只出現(xiàn)了一次的元素。

傳統(tǒng)方法我們可以想到利用計數(shù)器,但這種算法效率不理想。

今天我們就來學習異或法。

首先我們來復習一下位操作符

&:兩個數(shù)字對應二進制位有0則為0,兩個同時為1才是1。

|:兩個數(shù)字對應二進制位有1則為1,兩個同時為0才是0。

^:兩個數(shù)字對應二進制位相同為0,相異為1。

  • ?想要具體了解位操作符的同學可以移步這里??位操作符的應用,他會幫助你對本篇內(nèi)容的理解更加透徹。

我們知道兩個相同的數(shù)字異或得到的結(jié)果為0,而0^某個數(shù)字就是它本身,且異或操作符滿足交換律。

那么既然給定的該數(shù)組nums滿足只有其中一個元素出現(xiàn)一次,其他數(shù)字都出現(xiàn)兩次的情況,我們就可以利用^的特性來梳理邏輯:將nums數(shù)組的內(nèi)容異或到一起,此時相同的數(shù)字就都異或為0了,剩余一個單獨的數(shù)字與0異或得到它本身。

【LeetCode】260.只出現(xiàn)一次的數(shù)字 III(找出單身狗),LeetCode刷題筆記,leetcode,c語言,學習,筆記

代碼實現(xiàn):

int find_single_dog1(int arr[], int sz)
{
	int i = 0;
	int ret = 0;
	for (i = 0; i < sz; i++)
	{
		ret ^= arr[i];
	}
	return ret;
}

int main()
{
	int arr[] = { 1,2,3,4,7,1,2,3,4 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int dog = find_single_dog1(arr, sz);
	printf("%d\n", dog);
	return 0;
}

兩只單身狗:

LeetCode原題鏈接:??只出現(xiàn)一次的數(shù)字(2)??

題目:給你一個整數(shù)數(shù)組?nums,其中恰好有兩個元素只出現(xiàn)一次,其余所有元素均出現(xiàn)兩次。 找出只出現(xiàn)一次的那兩個元素。你可以按?任意順序?返回答案。

假設仍然按照異或法的邏輯能不能實現(xiàn)呢?

其實我們只需要將兩只單身狗的問題轉(zhuǎn)化為一只單身狗就好了,需要做的就是將兩只單身狗分開處理,這樣就到了我們熟悉的領域了。?

那么我們?nèi)绾尾拍軐芍粏紊砉贩珠_呢?

我們假設數(shù)組為:1,2,3,4,5,1,2,3,4,6。

觀察如果將該數(shù)組異或到一起得到:5^6。

【LeetCode】260.只出現(xiàn)一次的數(shù)字 III(找出單身狗),LeetCode刷題筆記,leetcode,c語言,學習,筆記

?根據(jù)異或的特性我們知道兩個不相同的二進制數(shù)字異或的結(jié)果為1,那么我們可不可以根據(jù)這一特性來區(qū)分兩個單身狗呢,我們可以利用數(shù)組異或的結(jié)果取一個位為1的位,在該位上,與5相同的分為一組,與6相同的分為一組。

比如:

【LeetCode】260.只出現(xiàn)一次的數(shù)字 III(找出單身狗),LeetCode刷題筆記,leetcode,c語言,學習,筆記

?分完組后是不是很熟悉,沒錯就是一只單身狗的處理方法了。

代碼實現(xiàn):

void find_single_dog2(int arr[], int sz, int* pd1, int* pd2)
{
	//1. 所有數(shù)字異或在一起
	int ret = 0;//5 ^ 6
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		ret ^= arr[i];
	}

	//2. 計算ret的第幾位是1
	int pos = 0;
	for (i = 0; i < 32; i++)
	{
		if (((ret >> i) & 1) == 1)
		{
			pos = i;
			break;
		}
	}

	//計算數(shù)組中元素的第pos為1的異或
	for (i = 0; i < sz; i++)
	{
		if (((arr[i] >> pos) & 1) == 1)
		{
			*pd1 ^= arr[i];
		}
	}
	//計算數(shù)組中元素的第pos為0的異或
	*pd2 = ret ^ *pd1;
}

int main()
{
	int arr[] = { 1,2,3,4,5,1,2,3,4,8 };
	int dog1 = 0;
	int dog2 = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	find_single_dog2(arr, sz, &dog1, &dog2);//dog1、dog2為返回型參數(shù)
	printf("%d %d", dog1, dog2);
	return 0;
}

?單身狗問題是筆試非常高頻的題型,掌握了這種方法相信會使你的解題思路更加清晰,如果本篇文章對你有幫助,希望多多支持博主,博主會持續(xù)創(chuàng)作優(yōu)質(zhì)內(nèi)容??文章來源地址http://www.zghlxwxcb.cn/news/detail-603313.html

到了這里,關于【LeetCode】260.只出現(xiàn)一次的數(shù)字 III(找出單身狗)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • LeetCode、136. 只出現(xiàn)一次的數(shù)字【簡單,位運算】

    LeetCode、136. 只出現(xiàn)一次的數(shù)字【簡單,位運算】

    博主介紹:?目前全網(wǎng)粉絲2W+,csdn博客專家、Java領域優(yōu)質(zhì)創(chuàng)作者,博客之星、阿里云平臺優(yōu)質(zhì)作者、專注于Java后端技術領域。 涵蓋技術內(nèi)容:Java后端、算法、分布式微服務、中間件、前端、運維、ROS等。 博主所有博客文件目錄索引:博客目錄索引(持續(xù)更新) 視頻平臺:

    2024年02月22日
    瀏覽(23)
  • Leetcode—137.只出現(xiàn)一次的數(shù)字II【中等】

    Leetcode—137.只出現(xiàn)一次的數(shù)字II【中等】

    實現(xiàn)代碼 為什么要用unsigned int呢,因為或左移溢出報錯,例如, Line 13: Char 13: runtime error: left shift of 2147483646 by 1 places cannot be represented in type ‘int’ [solution.c] 左移的高位如果超過符號位,就會報錯。因此要用類型強制轉(zhuǎn)換來 unsigned 來接住。 提交結(jié)果 解題思想 參考的是這兩

    2024年02月07日
    瀏覽(16)
  • 力扣(LeetCode)算法_C++—— 只出現(xiàn)一次的數(shù)字

    給你一個 非空 整數(shù)數(shù)組 nums ,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次。找出那個只出現(xiàn)了一次的元素。 你必須設計并實現(xiàn)線性時間復雜度的算法來解決此問題,且該算法只使用常量額外空間。 示例 1 : 輸入:nums = [2,2,1] 輸出:1 示例 2 : 輸入:nums = [4,

    2024年02月09日
    瀏覽(20)
  • 2023年7月3日leetcode每日一題打卡——136.只出現(xiàn)一次的數(shù)字

    136. 只出現(xiàn)一次的數(shù)字 - 力扣(LeetCode) 給你一個 非空 整數(shù)數(shù)組 nums ,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次。找出那個只出現(xiàn)了一次的元素。 你必須設計并實現(xiàn) 線性時間復雜度 的算法來解決此問題,且該算法 只使用常量額外空間 。 示例1: 示例2: 示

    2024年02月12日
    瀏覽(22)
  • 【LeetCode】每日一題&最后一個單詞的長度&投票法求解多數(shù)元素&異或操作符巧解只出現(xiàn)一次的數(shù)字&整數(shù)反轉(zhuǎn)

    ========================================================================= 個人主頁直達: 小白不是程序媛 LeetCode系列專欄: LeetCode刷題掉發(fā)記 ========================================================================= 目錄 LeetCode 58.最后一個單詞的長度 LeetCode169.多數(shù)元素 LeetCode 136.出現(xiàn)一次的數(shù)字 LeetCode 7.整數(shù)

    2024年02月08日
    瀏覽(25)
  • 只出現(xiàn)一次的數(shù)字

    問題: 給你一個? 非空 ?整數(shù)數(shù)組? nums ?,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次。找出那個只出現(xiàn)了一次的元素。 你必須設計并實現(xiàn)線性時間復雜度的算法來解決此問題,且該算法只使用常量額外空間。 示例: 示例 1 : 示例 2 : 示例 3 : 思想: 由于

    2024年02月07日
    瀏覽(23)
  • 只出現(xiàn)一次的數(shù)字——力扣136
  • 每日一題——只出現(xiàn)一次的數(shù)字

    每日一題——只出現(xiàn)一次的數(shù)字

    題目鏈接 要求為線性時間復雜度,即 時間復雜度為O(n) ,那么我們就不能用簡單的兩層循環(huán)來解決問題 要求只能使用常量額外空間,即 空間復雜度為O(1) ,那么我們就不能額外開辟一個數(shù)組來記錄每個元素出現(xiàn)的次數(shù) 這里,給大家介紹一個全新的方法:位運算——異或^ 注

    2024年02月15日
    瀏覽(19)
  • 【舉一反三】只出現(xiàn)一次的數(shù)字

    【舉一反三】只出現(xiàn)一次的數(shù)字

    ?本文,講位運算——異或運算。因為題干中說明要線性時間復雜度,所以采用位運算進行操作,而沒有采用哈希表。 目錄 1.只出現(xiàn)一次的數(shù)字 I ?2.只出現(xiàn)一次的數(shù)字 II ?3.只出現(xiàn)一次的數(shù)字 III 136. 只出現(xiàn)一次的數(shù)字 - 力扣(LeetCode) 題目: 給你一個 非空整數(shù)數(shù)組 nums ,除

    2023年04月15日
    瀏覽(28)
  • lc137. 只出現(xiàn)一次的數(shù)字 II

    lc137. 只出現(xiàn)一次的數(shù)字 II

    ? 數(shù)組排序 ,既和前不一樣又和后不一樣的就是唯一的一個 哈希表 位運算? ? 只有一個數(shù)出現(xiàn)了一次,其他數(shù)都出現(xiàn)了三次,那么別的數(shù)的 每個二進制位 加起來的和除3一定為0。 所以如果某個二進制位取余3不為0那么這個數(shù)就是所要求的答案的某個二進制位,再把它導出來

    2024年02月13日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包