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 = n,j = m;
while
(f[i]
[j]>0)
reverse
(res.
begin()
,res.
end())
;return res;}}
;
題解
法一:爆搜(超時)
class solution
intdfs
(int n,
int k)
return minv +1;
}};
法二:暴搜改動態規劃,時間複雜度o(n
∗n∗k
)o(n * n * k)
o(n∗n∗
k)
class solution
return f[n]
[k];}}
;
法三:打表,找規律
考慮n個棋子扔1.2.3.。。k次能夠解決多少層問題,打表,找規律。
class solution
f[i]
[j]= f[i -1]
[j -1]
+ f[i-1]
[j]+1;
if(f[i]
[j]>= n)
return i;
}return0;
}};
先對區間排序,最後的時候記得把最後一段區間加入
#include
/** * definition for an interval.
* struct interval
* interval(int s, int e) : start(s), end(e) {}
* };
*/bool cmp
(interval &a,interval &b)
class solution );
st = intervals[i]
.start,ed = intervals[i]
.end;
}else ed =
max(ed,intervals[i]
.end);}
if(st !=
-2e9
) ans.
push_back()
;// 把最後一段區間加入
return ans;}}
;
class solution
return res == x || res /
10== x;}}
;
題解
class solution
};
/**
* struct treenode ;
*/class solution ;}
bool dfs1
(treenode *root,
long
long minv,
long
long maxv)
// 判斷是否是二叉搜尋樹
bool dfs2
(treenode *root)
// 判斷是否是完全二叉樹
};
判斷是否是二叉搜尋樹的迭代版本
/**
* definition for a binary tree node.
* struct treenode
* treenode(int x) : val(x), left(nullptr), right(nullptr) {}
* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}
* };
*/class solution
root = stk.
top();
stk.
pop();
if(root->val <= inorder)
return false;
inorder = root->val;
root = root->right;
// 轉向右邊
}return true;}}
;
方法二:尋找鍊錶中點 + 鍊錶逆序 + 合併鍊錶
/**
* definition for singly-linked list.
* struct listnode
* listnode(int x) : val(x), next(nullptr) {}
* listnode(int x, listnode *next) : val(x), next(next) {}
* };
*/class solution
//cout << slow->val; 1. 看中點是否正確
auto p =
reverse
(slow->next)
; slow->next =
null
;/* 2. 看反轉鍊錶是否正確
while(head) coutnext;
cout << endl;
while(p) cout << p->val <<' ', p = p->next;
*/// 3.合併鍊錶
merge
(head,p);}
listnode*
reverse
(listnode* head)
return pre;
}void
merge
(listnode* l1,listnode* l2)}}
;
/**
* struct treenode ;
*/class solution
bool dfs
(treenode* root,
int sum)
};
去重技巧
class solution
void
dfs(vector<
int>
& num,
int u)
for(
int i =
0;i < num.
size()
;i ++)}
}};
演算法題 牛客研發最愛考 31 40
用堆進行多路歸併,時間複雜度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 wh...
牛客網華為研發工程師程式設計題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...