二分查找总结及部分Lintcode题目分析 4
二分法不只能像之前的记录,可以找到index~第二种类型是找到二分答案。有以下几个例子,都是之前二分法的扩展,不再赘述,只记录下忽略的点,以后回顾多注意~
1. wood cut
- class Solution:
- """
- @param L: Given n pieces of wood with length L[i]
- @param k: An integer
- return: The maximum length of the small pieces.
- """
- def pieces(self, L, length):
- p = 0
- for i in L:
- p += i / length
- return p
- def woodCut(self, L, k):
- # at first, this if check condition is ignored
- if sum(L) < k:
- return 0
- start = 1
# at first, use the average of sum of array.- end = max(L)
- while start + 1 < end:
- mid = start + (end - start) / 2
- if self.pieces(L, mid) >= k:
- start = mid
- else:
- end = mid
- if self.pieces(L, end) >= k:
- return end
- return start
2. First Bad Version:可以看成找到第一个是false的位置
- #class SVNRepo:
- # @classmethod
- # def isBadVersion(cls, id)
- # # Run unit tests to check whether verison `id` is a bad version
- # # return true if unit tests passed else false.
- # You can use SVNRepo.isBadVersion(10) to check whether version 10 is a
- # bad version.
- class Solution:
- """
- @param n: An integers.
- @return: An integer which is the first bad version.
- """
- def findFirstBadVersion(self, n):
- start = 1
- end = n
- while(start + 1 < end):
- mid = start + (end - start) / 2
- if SVNRepo.isBadVersion(mid):
- end = mid
- else:
- start = mid
- if SVNRepo.isBadVersion(start):
- return start
- return end
3. Search for a range:找到first position和last position的结合体,不过需要两次遍历,还没有找到更好的方法
- class Solution:
- """
- @param A : a list of integers
- @param target : an integer to be searched
- @return : a list of length 2, [index1, index2]
- """
- def searchRange(self, A, target):
- # write your code here
- if A is None or len(A) == 0:
- return[-1,-1]
- start = 0
- end = len(A) - 1
- while(start + 1 < end):
- mid = start + (end - start) / 2
- if A[mid] == target:
- end = mid
- elif A[mid] < target:
- start = mid
- else:
- end = mid
- if A[start] == target:
- left = start
- elif A[end] == target:
- left = end
- else:
- return[-1,-1]
- start = left
- end = len(A) - 1
- while start + 1 < end:
- mid = start + (end - start) / 2
- if A[mid] == target:
- start = mid
- elif A[mid] < target:
- start = mid
- else:
- end = mid
- if A[end] == target:
- right = end
- # one tip: cannot use another if, because there maybe two continuous
- # same num. so A[start] and A[end] maybe the same and the value of
- # A[start] may override the right value
- elif A[start] == target:
- right = start
- return [left,right]
二分查找总结及部分Lintcode题目分析 4的更多相关文章
- 二分查找总结及部分Lintcode题目分析 1
进行二分查找课程回顾与总结,包括以下几个方面,二分法的模板总结和解题思路.应用. 二分法模板总结classical binary search: 1. 必须要做的排除极端情况,也就是数组(用A表示)不 ...
- 二分查找总结及部分Lintcode题目分析 2
Search in a big sorted array,这个比之前的二分法模板多了一个很不同的特性,就是无法知道一个重要的条件end值,也是题目中强调的重点 The array is so big ...
- 二分查找总结及部分Lintcode题目分析 3
Search in rotated sorted array,题目中也给出了相应的例子,就是在sorted array某个节点发生了翻转(ie.0 1 2 4 5 6 7 might become 4 ...
- 二叉树总结及部分Lintcode题目分析 1
1. 遍历问题 Preorder / Inorder / Postorder preorder: root left right inorder: left root right postorder: ...
- Find Minimum in Rotated Sorted Array 典型二分查找
https://oj.leetcode.com/problems/find-minimum-in-rotated-sorted-array/ Suppose a sorted array is rot ...
- HDU 3763 CD【二分查找】
解题思路:给出两个数列an,bn,求an和bn中相同元素的个数因为注意到n的取值是0到1000000,所以可以用二分查找来做,因为题目中给出的an,bn,已经是单调递增的,所以不用排序了,对于输入的每 ...
- POJ 3273 Monthly Expense二分查找[最小化最大值问题]
POJ 3273 Monthly Expense二分查找(最大值最小化问题) 题目:Monthly Expense Description Farmer John is an astounding a ...
- 二分查找里的upper bound与lower bound的实现与分析
1. 问题引入 最近参选了学堂在线的课程数据结构(2015秋).课程由清华大学的邓俊辉老师主讲,在完成课后作业时,遇到了这样一个题目范围查询.在这个题目中,我需要解决这样一个子问题:给定了一组已经排好 ...
- (二分查找 拓展) leetcode 34. Find First and Last Position of Element in Sorted Array && lintcode 61. Search for a Range
Given an array of integers nums sorted in ascending order, find the starting and ending position of ...
随机推荐
- boost 大小端转换
boost 中有一个edmian 里面有转换函数模板 native_to_little<T> 本地转换为小端 native_to_bit<T> 本地转换为大端
- ES6面试 知识点汇总(全)
近期在复习ES6,针对ES6新的知识点,以问答形式整理一个全面知识和问题汇总.(全干货,适合对ES6有一定理解的同学复习,以及ES6面试.) 一.问:ES6是什么? 答: ES6是新一代的JS语言标准 ...
- Java——super关键字
2.3 super关键字 ①super不是引用类型,super中存储的不是内存地址,super指向的不是父类对象. ②super代表的是当前子类对象中的父类型特征. ③什么时候使用super? 类和父 ...
- spring5.02版快速入门
spring5.02版快速入门分为以下 四步, 1. 引入依赖 2. 创建beans.xml配置文件 3 创建相应的接口实现类(仅仅是快速创建,实现类不给任何方法) 4. 创建容器对象,根据id获取对 ...
- Oracle分页:工作记录
Oracle分页:传入值为List<String> . Mybatis XXXMapper.xml SELECT * FROM ( SELECT ROWNUM rn, t1.cardnum ...
- 依赖背包优化——hdu1561
傻逼依赖背包的优化 #include<bits/stdc++.h> using namespace std; #define N 205 ]; int head[N],tot,n,m,a[ ...
- delphi 获取文件图标
{根据文件的名字得到此文件在系统中对应大小的图标large=true(64*64) false(32*32)}procedure GetFileIcon(TypeName: Widestring; I ...
- NX二次开发-获取UG界面窗口句柄UF_UI_get_default_parent
1 extern "C" DllExport void ufusr(char *param, int *retcod, int param_len) 2 { 3 4 if (UF_ ...
- linux网络速率监控
#!/bin/bash #作者:fafu_li #时间: #监控网卡传输速率 source /etc/profile #加载系统环境变量 source $HOME/.bash_profile #加载用 ...
- 【Web】浅析JQuery的apply(), call(), bind()方法
原文地址:https://blog.csdn.net/whuzxq/article/details/64166253 由于在理解this的用法的时候多次出现了这几个方法,个人对这几个方法理解的不是很透 ...