牛客網刷題第二天(C C )(總結)

2021-10-03 01:17:14 字數 1678 閱讀 4042

一般我們把 short 稱為短整型,把 long 稱為長整型,把 long long 稱為超長整型,把 int 稱為整型。unsigned 打頭的那些整數型別統稱為無符號整型。例如:我們稱 unsigned short 為無符號短整型。以此類推。

不管是16位系統還是 32位 64位系統,sizeof(long)都等於4

不管指標是什麼型別,在32位編譯器下都是4位元組,在64位下是8位元組。區分開整形變數,在32和64下都是4位元組,除非自己定義位元組數。還有一點指標和它所指向的內容是分開儲存的。可能不在乙個位置。

int a=

3;main ()

s += a++

; printf (

"%d\n"

,s);

}

因為a是區域性變數,所以花括號執行完後,系統**記憶體,花括號內的a++並不影響全域性變數a的值

s+=5

s=5(s+=3)++

所以s=8

設順序表的長度為n。下列演算法中,最壞情況下比較次數小於n的是()。

正確答案: a

尋找最大項

堆排序快速排序

順序查詢法

順序表不是、不是、不是元素排列有序的線性表,而是指元素以順序儲存結構儲存在相鄰的物理儲存單元上,元素之間沒有直接大小關聯。

事實上,即使是無序序列,也可以通過演算法使其比較次數小於n,比如我能想到的一種演算法(不保證最優):

將資料兩兩分組,比較相鄰的元素,選出較大項,比較次數為n/2

在較大項中重複上述操作,比較次數依次為:n/4、n/8、n/16、…、1

對所有比較次數求和(等比數列求和,初中問題,我就不寫了),極限確實是n,但顯然有窮資料是取不到n次的。

關聯容器(如map, set, multimap,multiset),刪除當前的iterator,只會使當前的iterator失效,只要在erase時,遞增當前iterator即可。

對於序列式容器(如vector,deque),刪除當前的iterator會使後面所有元素的iterator都失效。這是因為vetor,deque使用了連續分配的記憶體,刪除乙個元素導致後面所有的元素會向前移動乙個位置。不過erase方法可以返回下乙個有效的iterator,cont.erase(iter++)可以修改為cont.erase(iter)

list使用了不連續分配的記憶體,並且它的erase方法也會返回下乙個有效的iterator。

64位機上,乙個結構體有三個成員,分別是char、int、short型別,三個成員位於結構體中不同位置時整個結構體的大小可能是下面哪些值?

記憶體對齊

三個資料,一共6種排列:

int 4b char 1b short 2b

根據記憶體對齊原則:

char int short char1 + 空3 + int4 + short2 + 空2 = 12

char short int char1 + 空1 + short2 + int4 = 8

int short char int4 + short2 + char1 + 空1 = 8

int char short int4 + char1 + 空1 + short2 = 8

short int char short2 + 空2 + int4 + char1 + 空3 = 12

short char int short2 + char1 + 空1 + int4 = 8

牛客刷題總結(第二天)

int a 5 int ptr int a 1 a 代表的是int 每次步長為乙個int a 代表的是 int 每次步長為所指向的陣列的大小 此時ptr指向陣列a最後乙個位置的下乙個位置 vector erase以後,itor已經指向下乙個元素了,不應該執行itor 任何型別指標都可以賦值給void...

leetcode第二天刷題

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空 看到這個題目第乙個想法就是用直接合併兩個陣列然後取中位數的方法。要注意的就是幾個陣列為空的情況需...

力扣刷題第二天

給你乙個陣列 candies 和乙個整數 extracandies 其中 candies i 代表第 i 個孩子擁有的糖果數目。對每乙個孩子,檢查是否存在一種方案,將額外的 extracandies 個糖果分配給孩子們之後,此孩子有 最多 的糖果。注意,允許有多個孩子同時擁有 最多 的糖果數目。示例...