5@toc
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
class
solution
return result;}}
;
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。
思路: 某一位上1出現的次數除以三的餘數一定是1或者0;
class
solution
cout<<
"i"<"sum"
=(sum%3)
<}return result;}}
;
class
solution
for(i=
0;i<
32;i++)}
for(
int e: nums)
else
} result.
push_back
(tmp_result1)
; result.
push_back
(tmp_result2)
;return result;}}
;
給定乙個非負整數 num。對於 0 ≤ i ≤ num 範圍中的每個數字 i ,計算其二進位制數中的 1 的數目並將它們作為陣列返回。
思路: 利用二叉樹的層次遍歷,左兒子位元數不變,右兒子位元數加一。
class
solution
while
(!que.
empty()
)else
}return result;}}
;
給定範圍 [m, n],其中 0 <= m <= n <= 2147483647,返回此範圍內所有數字的按位與(包含 m, n 兩端點)。
思路: 轉換為求最長公共字首,因為某一位上不同的話後一位肯定不同
class
solution
}return tmp1<;
乙個整型陣列 nums 裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o(n),空間複雜度是o(1)。
示例 1:
輸入:nums = [4,1,4,6]
輸出:[1,6] 或 [6,1]
示例 2:
輸入:nums = [1,2,10,4,1,4,3,3]
輸出:[2,10] 或 [10,2]
限制:
2 <= nums.length <= 10000
思路: 假設那兩個數為a,b,異或和為x。所有數字異或和等於x,找到x中為1的那一位index,說明在index位上a,b不同。把所有數字按照index位分為兩組,就轉換成兩個在一組數字中求乙個特殊數字的問題。
class
solution
for(index=
0;index<
32;index++)}
for(
int i=
0;i)else
} result.
push_back
(a);
result.
push_back
(b);
return result;}}
;
給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。
返回被除數 dividend 除以除數 divisor 得到的商。
整數除法的結果應當截去(truncate)其小數部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
示例 1:
輸入: dividend = 10, divisor = 3
輸出: 3
解釋: 10/3 = truncate(3.33333…) = truncate(3) = 3
示例 2:
輸入: dividend = 7, divisor = -3
輸出: -2
解釋: 7/-3 = truncate(-2.33333…) = -2
被除數和除數均為 32 位有符號整數。
除數不為 0。
假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231, 231 − 1]。本題中,如果除法結果溢位,則返回 231 − 1。
思路: 使用原碼除法,要把每個負數轉為正數,使用int表示數時,而-int_min會溢位,所以改用long。
使用補碼除法雖然不用把負數轉成正數,但是求餘數時可能涉及int_min的減法,所以還是要用long。
class
solution
bool flag2=divisor>0;
long divisorlong=divisor;if(
!flag2)
if(dividendlong==
0|| divisorlong>dividendlong)
bool flag=!(
(flag1)
^(flag2));
int znum1=
0,znum2=0;
unsigned
int t=
1<<31;
while
(true
)else
} t=
1<<31;
while
(true
)else
}long result=0;
long level=znum2-znum1;
long r=dividendlong;
long y=divisorlong
for(
;level>=
0;level--
)else}if
(!flag)
if(resultif(result>int_max)
cout<<
1-int_min;
return result;}}
;
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...
LeetCode 二進位制手錶
二進位制手錶頂部有 4 個 led 代表小時 0 11 底部的 6 個 led 代表分鐘 0 59 每個 led 代表乙個 0 或 1,最低位在右側。例如,上面的二進位制手錶讀取 3 25 給定乙個非負整數 n 代表當前 led 亮著的數量,返回所有可能的時間。案例 輸入 n 1 返回 1 00 2...
二進位制手錶(LeetCode)
二進位制手錶頂部有 4 個 led 代表小時 0 11 底部的 6 個 led 代表分鐘 0 59 每個 led 代表乙個 0 或 1,最低位在右側。例如,上面的二進位制手錶讀取 3 25 給定乙個非負整數 n 代表當前 led 亮著的數量,返回所有可能的時間。案例 輸入 n 1 返回 1 00 2...