classSolution:deffindContentChildren(self, g: List[int], s: List[int])->int:
g.sort()
s.sort()
n, m =len(g),len(s)
i = j = count =0while i < n and j < m:while j < m and g[i]> s[j]:
j +=1if j < m:
count +=1
i +=1
j +=1return count
funcfindContentChildren(greed, size []int)(ans int){
sort.Ints(greed)
sort.Ints(size)
n, m :=len(greed),len(size)for i, j :=0,0; i < n && j < m; i++{for j < m && greed[i]> size[j]{
j++}if j < m {
ans++
j++}}return}
第四百五十六题:
classSolution{public:boolfind132pattern(vector<int>& nums){
stack<int> stk;int right = INT_MIN;for(int i = nums.size()-1; i >=0; i --){if(nums[i]< right)returntrue;while(stk.size()&& nums[i]> stk.top()){
right =max(right, stk.top());
stk.pop();}
stk.push(nums[i]);}returnfalse;}};
classSolution{publicbooleanfind132pattern(int[] nums){int n = nums.length;
List<Integer> candidateI =newArrayList<Integer>();
candidateI.add(nums[0]);
List<Integer> candidateJ =newArrayList<Integer>();
candidateJ.add(nums[0]);for(int k =1; k < n;++k){int idxI =binarySearchFirst(candidateI, nums[k]);int idxJ =binarySearchLast(candidateJ, nums[k]);if(idxI >=0&& idxJ >=0){if(idxI <= idxJ){returntrue;}}if(nums[k]< candidateI.get(candidateI.size()-1)){
candidateI.add(nums[k]);
candidateJ.add(nums[k]);}elseif(nums[k]> candidateJ.get(candidateJ.size()-1)){int lastI = candidateI.get(candidateI.size()-1);while(!candidateJ.isEmpty()&& nums[k]> candidateJ.get(candidateJ.size()-1)){
candidateI.remove(candidateI.size()-1);
candidateJ.remove(candidateJ.size()-1);}
candidateI.add(lastI);
candidateJ.add(nums[k]);}}returnfalse;}publicintbinarySearchFirst(List<Integer> candidate,int target){int low =0, high = candidate.size()-1;if(candidate.get(high)>= target){return-1;}while(low < high){int mid =(high - low)/2+ low;int num = candidate.get(mid);if(num >= target){
low = mid +1;}else{
high = mid;}}return low;}publicintbinarySearchLast(List<Integer> candidate,int target){int low =0, high = candidate.size()-1;if(candidate.get(low)<= target){return-1;}while(low < high){int mid =(high - low +1)/2+ low;int num = candidate.get(mid);if(num <= target){
high = mid -1;}else{
low = mid;}}return low;}}
classSolution:deffind132pattern(self, nums: List[int])->bool:
candidate_i, candidate_j =[-nums[0]],[-nums[0]]for v in nums[1:]:
idx_i = bisect.bisect_right(candidate_i,-v)
idx_j = bisect.bisect_left(candidate_j,-v)if idx_i < idx_j:returnTrueif v <-candidate_i[-1]:
candidate_i.append(-v)
candidate_j.append(-v)elif v >-candidate_j[-1]:
last_i =-candidate_i[-1]while candidate_j and v >-candidate_j[-1]:
candidate_i.pop()
candidate_j.pop()
candidate_i.append(-last_i)
candidate_j.append(-v)returnFalse
funcfind132pattern(nums []int)bool{
candidateI, candidateJ :=[]int{-nums[0]},[]int{-nums[0]}for_, v :=range nums[1:]{
idxI := sort.SearchInts(candidateI,1-v)
idxJ := sort.SearchInts(candidateJ,-v)if idxI < idxJ {returntrue}if v <-candidateI[len(candidateI)-1]{
candidateI =append(candidateI,-v)
candidateJ =append(candidateJ,-v)}elseif v >-candidateJ[len(candidateJ)-1]{
lastI :=-candidateI[len(candidateI)-1]forlen(candidateJ)>0&& v >-candidateJ[len(candidateJ)-1]{
candidateI = candidateI[:len(candidateI)-1]
candidateJ = candidateJ[:len(candidateJ)-1]}
candidateI =append(candidateI,-lastI)
candidateJ =append(candidateJ,-v)}}returnfalse}
第四百五十七题:
classSolution{public:boolcircularArrayLoop(vector<int>& nums){int n = nums.size(), Base =10000;for(int i =0; i < n; i ++){if(nums[i]>= Base)continue;int k = i, S = Base + i, t = nums[k]>0;int last =-1;do{int p =((k + nums[k])% n + n)% n;
last = nums[k], nums[k]= S;
k = p;}while(k != i && nums[k]< Base &&(t ^(nums[k]>0))==0);if(last % n && nums[k]== S)returntrue;}returnfalse;}};
funcpoorPigs(buckets int, minutesToDie int, minutesToTest int)int{
times := minutesToTest/minutesToDie
times = times +1
result := math.Log(float64(buckets))/math.Log(float64(times))returnint(math.Ceil(result))}
第四百五十九题:
classSolution{public:boolrepeatedSubstringPattern(string s){int n = s.size();
s =' '+ s;
vector<int>next(n +1);for(int i =2, j =0; i <= n; i ++){while(j && s[i]!= s[j +1]) j = next[j];if(s[i]== s[j +1]) j ++;
next[i]= j;}int t = n - next[n];return t < n && n % t ==0;}};
classSolution{publicbooleanrepeatedSubstringPattern(String s){returnkmp(s);}publicbooleankmp(String pattern){int n = pattern.length();int[] fail =newint[n];
Arrays.fill(fail,-1);for(int i =1; i < n;++i){int j = fail[i -1];while(j !=-1&& pattern.charAt(j +1)!= pattern.charAt(i)){
j = fail[j];}if(pattern.charAt(j +1)== pattern.charAt(i)){
fail[i]= j +1;}}return fail[n -1]!=-1&& n %(n - fail[n -1]-1)==0;}}
classSolution:defrepeatedSubstringPattern(self, s:str)->bool:defkmp(pattern:str)->bool:
n =len(pattern)
fail =[-1]* n
for i inrange(1, n):
j = fail[i -1]while j !=-1and pattern[j +1]!= pattern[i]:
j = fail[j]if pattern[j +1]== pattern[i]:
fail[i]= j +1return fail[n -1]!=-1and n %(n - fail[n -1]-1)==0return kmp(s)
funcrepeatedSubstringPattern(s string)bool{returnkmp(s)}funckmp(pattern string)bool{
n :=len(pattern)
fail :=make([]int, n)for i :=0; i < n; i++{
fail[i]=-1}for i :=1; i < n; i++{
j := fail[i -1]for(j !=-1&& pattern[j +1]!= pattern[i]){
j = fail[j]}if pattern[j +1]== pattern[i]{
fail[i]= j +1}}return fail[n -1]!=-1&& n %(n - fail[n -1]-1)==0}
第四百六十题:
classLFUCache{public:struct Node {
Node *left,*right;int key, val;Node(int _key,int _val){
key = _key, val = _val;
left = right =NULL;}};struct Block {
Block *left,*right;
Node *head,*tail;int cnt;Block(int _cnt){
cnt = _cnt;
left = right =NULL;
head =newNode(-1,-1), tail =newNode(-1,-1);
head->right = tail, tail->left = head;}~Block(){delete head;delete tail;}voidinsert(Node* p){
p->right = head->right;
head->right->left = p;
p->left = head;
head->right = p;}voidremove(Node* p){
p->left->right = p->right;
p->right->left = p->left;}boolempty(){return head->right == tail;}}*head,*tail;int n;
unordered_map<int, Block*> hash_block;
unordered_map<int, Node*> hash_node;voidinsert(Block* p){// 在p的右侧插入新块,cnt是p->cnt + 1auto cur =newBlock(p->cnt +1);
cur->right = p->right;
p->right->left = cur;
p->right = cur;
cur->left = p;}voidremove(Block* p){
p->left->right = p->right;
p->right->left = p->left;delete p;}LFUCache(int capacity){
n = capacity;
head =newBlock(0), tail =newBlock(INT_MAX);
head->right = tail, tail->left = head;}intget(int key){if(hash_block.count(key)==0)return-1;auto block = hash_block[key];auto node = hash_node[key];
block->remove(node);if(block->right->cnt != block->cnt +1)insert(block);
block->right->insert(node);
hash_block[key]= block->right;if(block->empty())remove(block);return node->val;}voidput(int key,int value){if(!n)return;if(hash_block.count(key)){
hash_node[key]->val = value;get(key);}else{if(hash_block.size()== n){auto p = head->right->tail->left;
head->right->remove(p);if(head->right->empty())remove(head->right);
hash_block.erase(p->key);
hash_node.erase(p->key);delete p;}auto p =newNode(key, value);if(head->right->cnt >1)insert(head);
head->right->insert(p);
hash_block[key]= head->right;
hash_node[key]= p;}}};/**
* Your LFUCache object will be instantiated and called as such:
* LFUCache* obj = new LFUCache(capacity);
* int param_1 = obj->get(key);
* obj->put(key,value);
*/
funchammingDistance(x int, y int)int{
i :=x^y//x和y异或,得到一个新的数(异或相同为0,不同为1,此时咱们需要统计1的个数)
count :=0//定义数量的初始值为0for(i!=0){//只要i不为0,那就继续循环if((i&1)==1){//如果i和1相与,值为1的话就count++
count++}
i = i>>1//i右移一位}return count
}
第四百五十五题:class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { sort(g.begin(), g.end()); sort(s.begin(), s.end()); int res = 0; for (int i = 0, j = 0; i < g.size(); i +