算法刷刷刷
Mr_Hzz
这个作者很懒,什么都没留下…
展开
-
思考题:找出那瓶毒药水(2个经典问题)及通用解法
问题一:有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?题解:1.把瓶子从 0 到 999 依次编号,然后全部转换为 10 位二进制数。2.让第一只老鼠喝掉所有二进制数右起第一位是 1 的瓶子,让第二只老鼠喝掉所有二进制数右起第二位是 1 的瓶子,等等。3.一星期后,如果第一只老鼠死了,就知道毒药瓶子的二进制编号中,右起第一位是 1 ;如果第二只老鼠没死原创 2021-03-30 14:34:28 · 1832 阅读 · 0 评论 -
整数二分法的非递归模板(2种情况)
简单总结一下就是在**[0,0,0,…,0]** (共k个数) 里面搜索0。使用第一个会返回位置0使用第二个会返回k - 1也可以看做寻找 第一个<= target的元素 和 最后一个<= target的元素二分模板一共有两个,分别适用于不同情况。算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。版本1当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid +转载 2021-03-29 21:43:27 · 92 阅读 · 0 评论 -
归并排序通用模板
给定你一个长度为 n 的整数数列。请你使用归并排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在 1∼10^9 范围内),表示整个数列。输出格式输出共一行,包含 nn 个整数,表示排好序的数列。数据范围1≤n≤100000输入样例:53 1 2 4 5输出样例:1 2 3 4 5#include<iostream>using namespace std;const i原创 2021-03-29 20:36:09 · 129 阅读 · 0 评论 -
快速排序通用模板
给定你一个长度为 nn 的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 nn。第二行包含 nn 个整数(所有整数均在 1∼1091∼109 范围内),表示整个数列。输出格式输出共一行,包含 nn 个整数,表示排好序的数列。数据范围1≤n≤1000001≤n≤100000输入样例:53 1 2 4 5输出样例:1 2 3 4 5题解:#include <iostream>using n原创 2021-03-29 19:56:23 · 77 阅读 · 0 评论