演算法營day9

2021-10-08 15:15:28 字數 1993 閱讀 9121

題目描述

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

思路:

如果乙個陣列中,只有乙個數字出現一次的話,求這個數的?將序列中的所有數字異或,因為相同的數字異或會為0,乙個不為0的數字異或還是這個數字本身。

這個題可以轉換為上述的題,將序列中的所有數字異或,最後得到的的數,是這兩個不同的數字的異或,用序列中的每個數和得到的這個數求&運算,根據等不等於0將陣列分成兩組。

**:

class

solution

// 第一步先整體異或

int result = data[0]

;for

(auto it = data.

begin()

+1;it != data.

end();

++it)

// 第二步,分解找到第乙個位元位為1,這裡從低往高進行

int flag =1;

int length =

sizeof

(int);

for(

int i =

0;i < length;

++i)

}// 第三部分,分組異或

*num1 =0;

*num2 =0;

for(

int i =

0;i size()

;++i)

else}}

};

題目描述

小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和為s的連續正數序列? good luck!

輸出描述:

輸出所有和為s的連續正數序列。序列內按照從小至大的順序,序列間按照從小到大的順序。

思路:

滑動視窗的思想解決,題目中的隱含條件就是序列最大值不會大於該值。

**:

class

solution

result.

push_back

(vec)

;++low;

}else

if(total < sum)

else

}return result;}}

;

題目描述

組合語言中有一種移位指令叫做迴圈左移(rol),現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於乙個給定的字串行s,請你把其迴圈左移k位後的序列輸出。例如,字串行s=」abcxyzdef」,要求輸出迴圈左移3位後的結果,即「xyzdefabc」。是不是很簡單?ok,搞定它!

思路:

儲存第乙個,剩下的整體往前移動乙個,第乙個放在最後,完成一次移動,迴圈就可以完成多次移動

**:

class

solution

str[i-1]

= temp;

//i要減一防止越界

} string leftrotatestring

(string str,

int n)

n %= str.

size()

;while

(n--

) cout

;

思路:

區域性逆置,整體逆置

**:

class

solution

};

2016長樂夏令營 Day9

t1 帶權並查集。每個約束看做一條x連向y的邊,邊權為x y c 對於乙個x,可能有多個y與他有關係,間接可以算出y與y 的關係,那麼邊權就記為y y 每次加入條件,就看看是否衝突 細節詳見 據說正解是差分約束?苟蒻是真不會。include include includeusing namespac...

雙指標演算法 day 9

樸素做法模板 for int i 0 i n i for int j 0 j i j if check j,i 雙指標演算法模板 for int i 0,j 0 i n i 問題 最長連續不重複子序列 給定乙個長度為n的整數序列,請找出最長的不包含重複數字的連續區間,輸出它的長度。輸入格式 第一行包...

演算法題Day9 移除元素

給定乙個陣列 nums 和乙個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。示例 1 給定 nums 3,2,2,3 ...