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
题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null 思路:链表存在环,则没有尾节点. 对于链表一个指针无法解决时,考
题目:输入两个链表,找出它们的第一个公共结点 思路:暴力法时间复杂度O(n^2). 当两个链表具有公共节点时,第一个公共节点之后的节点全部相等.
题目一:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度 思路:求树的深