算法----二分三分
sunlanchang
北京邮电大学-计算机硕士,sunlanchang@bupt.edu.cn
展开
-
剑指 Offer 11. 旋转数组的最小数字(二分)
Description把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-x原创 2020-07-22 22:53:53 · 141 阅读 · 0 评论 -
153. 寻找旋转排序数组中的最小值(二分)
Description假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-minimum-in-rotated-原创 2020-07-22 22:44:37 · 229 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字 (二分)
Description一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof著作权归领扣网络所有。商业转载请联系官方授权原创 2020-07-21 16:51:02 · 212 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I (二分)
Description统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商原创 2020-07-21 16:18:06 · 161 阅读 · 0 评论 -
LeetCode 162. 寻找峰值(二分)
Description峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。示例 1:输入: nums = [1,2,3,1]输出: 2解释: 3 是峰值元素,你的函数应该返回其索引 2。示例 2:输入: nums = [1,2,1,3,5,6,4]输出: 1 或 5 解释原创 2020-07-05 23:45:21 · 203 阅读 · 0 评论 -
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置(二分)
Description给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]来源:力扣(LeetCode)链接:htt原创 2020-06-30 21:57:39 · 143 阅读 · 0 评论 -
LeetCode 4. 寻找两个正序数组的中位数(二分)
Description给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5来源:力扣(LeetCode)链接:https原创 2020-06-30 16:19:14 · 295 阅读 · 0 评论 -
LeetCode 33. 搜索旋转排序数组(两次二分)
Description假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7...原创 2019-11-15 16:08:15 · 193 阅读 · 0 评论 -
LeetCode 287. 寻找重复数(二分变形)
Description给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间...原创 2019-11-02 09:40:22 · 428 阅读 · 0 评论 -
Leetcode 704. 二分查找
Description给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3...原创 2019-10-25 19:26:12 · 88 阅读 · 0 评论 -
Leetcode 35. 搜索插入位置(二分)
Description给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], ...原创 2019-10-25 19:08:57 · 170 阅读 · 0 评论 -
Leetcode 69. x 的平方根(二分法、牛顿法)
Description实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。Solution参考:Leetcode解析class So...原创 2019-10-25 15:00:34 · 406 阅读 · 0 评论 -
POJ 2456 Aggressive cows (二分查找)
Description给n个牛栏坐标和c头牛,把c个牛放到n个牛栏上,求满足任意两头牛位置最远的最小值Sample Input5 3 1 2 8 4 9Sample Output3HintOUTPUT DETAILS: FJ can put his 3 cows in the stalls at positions 1, 4 and 8, resulting in a minimum di原创 2017-07-19 16:24:20 · 332 阅读 · 0 评论 -
HDU 3714 Error Curves(三分)
Description给出n个二次函数 问f(x)在[0,1000]的最小值 Input第一行一整数T表示用例组数,每组用例首先输入一整数n表示二次函数数量,之后n行每行输入三个系数a[i],b[i],c[i] (T < 100,n<=10000,0<=a<=100,|b|,|c|<=5000) Output对于每组用例,输出f(x)的最小值,结果保留四位小数 Sample Input2原创 2017-07-19 19:10:10 · 201 阅读 · 0 评论 -
POJ 1905 Expanding Rods(二分)
Description 下图中线段长度为L,上边圆弧长度为L’=(1+n * C) * L,问圆弧最高点到线段的距离 Input 多组用例,每组用例输入三个非负实数L,n,C,以三个负数结束输入 Output 输出圆弧最高点到线段的距离 Sample Input 1000 100 0.0001 15000 10 0.00006 10 0 0.001 -1原创 2017-07-19 22:51:42 · 208 阅读 · 0 评论 -
NowCoder 查找学生信息 (二分查找)
题目描述输入N个学生的信息,然后进行查询。输入描述:输入的第一行为N,即学生的个数(N&lt;=1000)接下来的N行包括N个学生的信息,信息格式如下:01 李江 男 2102 刘唐 男 2303 张军 男 1904 王娜 女 19然后输入一个M(M&lt;=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下:02030104输出描述:输出M行,每...原创 2019-01-03 17:24:19 · 401 阅读 · 0 评论 -
STL二分查找的python实现(模板)
C++标准库里的超简洁、bug free的通用写法写成能跑的Python只有6行,返回不小于value的值的下标。即使区间为空、答案不存在、有重复元素、搜索开/闭的上/下界也同样适用:#返回[first, last)内第一个不小于value的值的位置def lower_bound(array, first, last, value): while first &amp;lt; last: #...转载 2019-01-03 17:29:43 · 302 阅读 · 0 评论 -
牛客网 查找(二分查找、北邮机试)
题目描述输入数组长度 n 输入数组 a[1…n] 输入查找个数m 输入查找数字b[1…m] 输出 YES or NO 查找有则YES 否则NO 。输入描述:输入有多组数据。每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1&amp;lt;=m,n&amp;lt;=100)。输出描述如果在n个数组中输出YES否则输出NO。示例1输入51 5 2 4 332 5 6...原创 2019-01-31 19:08:15 · 483 阅读 · 0 评论 -
剑指 offer 二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。Solution二分法查找:# -*- coding:utf-8 -*-class Solution: # array 二维列表 def Find(self, target,...原创 2019-07-16 10:07:55 · 138 阅读 · 0 评论 -
HDU 5101 Select(二分)
Descriptionn个班级,每个班级有m[i]个孩子,第i个班级第j个孩子的智商为v[i][j],问从不同的两个班级中分别选一个孩子使得这两个孩子的智商和超过k的方案数 Input第一行一整数T表示用例组数,每组用例首先输入两个整数n和k,之后n行每行首先输入一整数m[i]表示该班级孩子数量,之后输入m[i]个整数v[i][j]表示每个孩子的智商(T<=20,0<=n<=1000,0<=k <原创 2017-07-31 22:01:32 · 234 阅读 · 0 评论