用堆進行多路歸併
,時間複雜度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;}}
;
貪心 + 二分,時間複雜度o(nclass solution
return c;}}
;
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])
判斷是在前半段還是後半段
排序 + 雙指標,時間複雜度o(nclass solution
if(target <= a[n -1]
) r = n -1;
// 後半段
else l =
0, r --
;// 前半段
while
(l < r)
if(a[l]
!= target)
return-1
;return l;}}
;
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;}}
;
前置知識:1. 快慢指標 2. 歸併排序 3. 合併兩個有序鍊錶class solution
stk.
push
(i);
}return res;}}
;
題解
/**
* 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...