演算法題 牛客研發最愛考 31 40

2021-10-19 11:17:14 字數 3016 閱讀 5334

用堆進行多路歸併,時間複雜度o(n

logk

)o(nlogk)

o(nlog

k)

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution );

listnode *head = new listnode(-

1);auto cur = head;

while

(heap.

size()

));}

cur->next =

null

;return head->next;}}

;

遞迴實現排列

class solution 

void

dfs(

int u)

for(

int i =

0;i < n;i ++)if

(!st[i])}

};

next_permutation()函式返回下乙個排列

class solution 

while

(next_permutation

(str.

begin()

, str.

end())

);return res;}}

;

遞推

class solution 

return c;}}

;

貪心 + 二分,時間複雜度o(n

logn

)o(nlogn)

o(nlog

n)增加記錄方案的dp[i] : 表示下標為i的元素長度為dp[i]。

class solution 

dp[i]

= r +1;

len =

max(len,r +1)

; q[r +1]

= arr[i];}

vector<

int>

res(len)

;//cout << len (int i =

0;i < n;i ++

) cout << dp[i]

<<

" ";

for(

int i = n -

1;len >=

1;i --

)// 從後往前遍歷,在後面的一定是字典序最小的(貪心決定)

if(dp[i]

== len)

return res;}}

;

二分找分界點,再根據if(target <= a[n - 1])判斷是在前半段還是後半段

class solution 

if(target <= a[n -1]

) r = n -1;

// 後半段

else l =

0, r --

;// 前半段

while

(l < r)

if(a[l]

!= target)

return-1

;return l;}}

;

排序 + 雙指標,時間複雜度o(n

2)

o(n ^ 2)

o(n2

)

class solution 

else

if(sum <0)

res.

push_back()

;// 去重

dowhile

(l < r && num[l]

== num[l -1]

);dowhile

(l < r && num[r]

== num[r +1]

);}}

return res;}}

;

class solution 

return len;}}

;

class solution 

stk.

push

(i);

}return res;}}

;

前置知識:1. 快慢指標 2. 歸併排序 3. 合併兩個有序鍊錶

題解

/**

* struct listnode ;

*/class solution

fast = slow;

slow = slow->next;

// slow 指向中間節點

fast->next =

null

;// 歸併排序

listnode *left =

sortinlist

(head)

; listnode *right =

sortinlist

(slow)

;return

merge_sort

(left,right);}

listnode*

merge_sort

(listnode *l1,listnode *l2)

else

cur = cur->next;

} cur->next = l1 ==

null

? l2 : l1;

return dummy->next;}}

;

/*

struct treenode

};*/

class solution

void

dfs(treenode *root)

};

演算法題 牛客研發最愛考 71 80

class solution void dfs int n,int lc,int rc,string seq 記錄方案,記錄轉移狀態,這裡記錄最前面,也就是第乙個可以轉移的 class solution if f n m 0 return 1 最長公共子串行記錄方案 string res int i...

牛客網華為研發工程師程式設計題2 3

程式設計題 明明的隨機數 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32m,其他語言64m 明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了n個1到1000之間的隨機整數 n 1000 對於其中重複的數字,只保留乙個,把其餘相同的數去掉,不同的數對應著不...

牛客演算法刷題注意事項

方式1 import sys lines sys.stdin.readlines 方式2 while true line input if line breaka 1 2 b map int,a print b ret int 0100 2 二維陣列轉置a 1,2,3 4,5,6 at list m...