rand5 函数可以等概率随机产生1-5五个数, 要求用 rand5 模拟出rand7. 考虑以rand7 实现rand5 def rand5(): res=6 while(res>5): res=random.randint(1,7) return res 验证是否生成的数字是等概率生成1
给定一个一个排序数组, 将前端部分数字放到数组尾部, 求出数组中的最小数字, [4,5,6,1,2,3] 返回1. 对于有序数组, 考虑使用二分查找法. 当 arr[mid] > arr[high] 时, 最小值必在【
动态规划,提起来就头大┭┮﹏┭┮, 以本文记录常考的动态规划算法 在问题满足动态规划求解的时候, 动态规划主要靠维护一个数组来记录状态转移值, 只要
给定一个数组, 假设其中有两个数只出现了一次, 其它均出现了两次, 让找出只出现了一次的两个数字. 对于数字出现次数, 可从异或角度出发. 当数组中只有
给定字符串, 输出或统计全排列个数. 并去重 void judge(char* p, char* P1){ while(p<p1){ if(*p==*p1) return true; } return false; } void permutation(char* orig, char* ind_cur){ if(*ind_cur=='\0') cout<<orig<<endl; else{ for(char* p=ind_cur;p!='\0';p++){ if(judge(ind_cur, p)) continue; char temp = *p; *p=*ind_cur; *ind_cur=temp; permutation(orig, ind_cur+1); temp=*p; *p=*ind_cur; *ind_cur=temp; } } } void permutation(char* str){ if(str==nullptr) return; permutation(str,str); }
树节点 struct TreeNode{ int val; TreeNode * left, * right; TreeNode(int val){ this->val = val; this->left=nullptr; this->right= nullptr; } }; 二叉树前中后序遍历递归非递归 // 递归实现 void pre_order(TreeNode * head){ if(head==nullptr) return; cout<<head->val<<endl; if(head->left) pre_order(head->left); if(head->right) pre_order(head->right); } void in_order(TreeNode * head){ if(head->left) in_order(head->left); cout<<head->val<<endl; if(head->right) in_order(head->right); } void post_order(TreeNode * head){ if(head->left) post_order(head->left); if(head->right)
大根堆排序流程: 建堆, 构建二叉树, 父节点均大于子节点 将堆首元素与堆尾元素交换 重新调整堆, 不包含堆尾元素 void adjustHeap(std::vector<int> &arr, int p_ind, int size){ int l_child = 2 * p_ind + 1; while(l_child < size){ if(l_child
要求实现开方函数,面试时这个问题出现的次数还是比较多的。 一:二分查找法 对于一个给定的非负数A,它的平方根都不会大于[A/2+1],故在[0,