**475. Heaters
思路:每趟循环查找离房子最近的热水器,计算距离,最后取最大距离

public int findRadius(int[] houses, int[] heaters) {
Arrays.sort(houses);
Arrays.sort(heaters); int j = 0;
int res = 0;
for(int i = 0; i < houses.length; i++){
//找离house[i]最近的heater
while(j < heaters.length - 1 && heaters[j] + heaters[j + 1] <= 2 * houses[i]){
j++;
}
res = Math.max(res,Math.abs(heaters[j] - houses[i]));
}
return res;
}
**410. Split Array Largest Sum
思路:结果一定在最大值和总和之间,因此在这两个数之间用二分查找;看中间值能不能符合区间个数

public int splitArray(int[] nums, int m) {
int max = 0;
int sum = 0;
for(int i = 0; i < nums.length; i++){
max = Math.max(max,nums[i]);
sum += nums[i];
} int i = max;
int j = sum;
while(i <= j){
int d = i + (j - i) / 2;
if(isValid(nums,m,d)) j = d - 1;
else i = d + 1;
}
return i;
} public boolean isValid(int[] nums,int m,int d){
int count = 1;
int total = 0;
for(int i = 0; i < nums.length; i++){
total += nums[i];
if(total > d){
total = nums[i];
count++;
if(count > m) return false;
}
}
return true;
}
**354. Russian Doll Envelopes
思路:将区间按第一个数升序,第二个数降序排列,只需要计算第二个数的最长递增序列个数即可,注意Arrays.sort()的自定义排序的使用,即第300题

public int maxEnvelopes(int[][] envelopes) {
if(envelopes.length == 0 || envelopes[0].length == 0) return 0;
Arrays.sort(envelopes,new Comparator<int[]>(){
public int compare(int[] a,int[] b){
if(a[0] == b[0]){
return b[1] - a[1];
}
else{
return a[0] - b[0];
}
}
}); int[] dp = new int[envelopes.length];
for(int i = 0; i < dp.length; i++) dp[i] = 1;
for(int i = 1; i < envelopes.length; i++){
for(int j = 0; j < i; j++){
if(envelopes[i][1] > envelopes[j][1]) dp[i] = Math.max(dp[i],dp[j] + 1);
}
}
int res = 0;
for(int k : dp){
res = Math.max(k,res);
}
return res;
}
总结
278. First Bad Version:经典二分查找,属于查找临界点,注意最终终止索引
374. Guess Number Higher or Lower:经典二分查找,属于查找某个数
441. Arranging Coins:二分查找,属于查找临界点,注意最终终止索引
367. Valid Perfect Square:二分查找,属于查找某个数
240. Search a 2D Matrix II:从右上角开始查找,小则往下,大则往左
378. Kth Smallest Element in a Sorted Matrix:将matrix放在PriorityQueue中实现排序
392. Is Subsequence:按照s的顺序在t中查找,用计数器计数,等于s.length()则返回true
69. Sqrt(x):二分查找,两个临界点m和m + 1,考虑所有区间的情况即可
训练
300. Longest Increasing Subsequence:dp中的元素表示当前索引值为序列最后一个数时的长度
275. H-Index II:属于查找临界点,注意最终终止索引
**436. Find Right Interval:用TreeMap,注意ceilingEntry()的使用
50. Pow(x, n):递归但是要考虑减少栈帧,还有边界问题
174. Dungeon Game:构造二维数组存每个格子所需最小体力,从终点开始一次往前计算所需最小体力,先计算边界
提示
1.直接查找某个数直接二分查找i <= j,并且最终一定能找到
2.若是找某个临界点,也直接i <= j,只不过要想清楚最终终止索引的位置,相邻数中点一定是较小数,并且一定在临界点左边或就是临界点减小了范围
3.若查找过程中判定条件会越界,则将int转化为long

LeetCode---Binary Search的更多相关文章

  1. [LeetCode] Binary Search 二分搜索法

    Given a sorted (in ascending order) integer array nums of n elements and a target value, write a fun ...

  2. LeetCode Binary Search All In One

    LeetCode Binary Search All In One Binary Search 二分查找算法 https://leetcode-cn.com/problems/binary-searc ...

  3. LeetCode & Binary Search 解题模版

    LeetCode & Binary Search 解题模版 In computer science, binary search, also known as half-interval se ...

  4. [LeetCode] Binary Search Tree Iterator 二叉搜索树迭代器

    Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...

  5. LeetCode Binary Search Tree Iterator

    原题链接在这里:https://leetcode.com/problems/binary-search-tree-iterator/ Implement an iterator over a bina ...

  6. [Leetcode] Binary search -- 475. Heaters

    Winter is coming! Your first job during the contest is to design a standard heater with fixed warm r ...

  7. 153. Find Minimum in Rotated Sorted Array(leetcode, binary search)

    https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/ leetcode 的题目,binary ...

  8. [Leetcode] Binary search, Divide and conquer--240. Search a 2D Matrix II

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  9. [Leetcode] Binary search, DP--300. Longest Increasing Subsequence

    Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...

  10. LeetCode: Binary Search Tree Iterator 解题报告

    Binary Search Tree Iterator Implement an iterator over a binary search tree (BST). Your iterator wil ...

随机推荐

  1. Mac下手动安装SafariDriver extension

    环境:Mac OS X Yosemite 10.10.4下, Safari 8 Step 1:第一次运行SafariDriver时,先找到WebDriver extension的安装路径,比如/Use ...

  2. iOS多线程学习及总结

    能有份网上的存储资料,备以后提升及参考 iOS 多线程编程 简介 一.      iOS有三种多线程编程的技术,分别是: 1.        NSThread 2.        Cocoa NSOp ...

  3. Java的流程控制和C++的异同

    Java的流程控制和C++基本相似 现将不同的地方总结一下,以便快速掌握. Java的特殊流程控制的特殊部分: 1.顺序结构  -- 没有区别 2.分之结构  -- 没有区别 3.循环结构 1> ...

  4. 数据结构《19》----String容器的三种实现

    一.序言 一个简单的string 容器到底是如何实现的? 本文给出了 String 的三种从易到难的实现,涉及了 reference counting, copy on write 的技术. 二.第一 ...

  5. JAVAWEB学习总结 HttpServletResponse对象(一)

    Web服务器收到客户端(浏览器)的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应的response对象. request和response对象既然代表请求和响 ...

  6. 本地测试AJAX请求

    要在本地测试AJAX,首先是环境的搭建,因为XHR对象的open方法中参数url是指文件在服务器上的文件.下面以WampServer为例. 1. 下载wamp的安装包,下载地址为:http://221 ...

  7. vi学习 常用命令-新建-复制-剪切-粘贴

    mkdir /home/brandon.du/desktop/mylinux/test_1.txt   ---------mkdir新建文件夹 rm /home/brandon.du/desktop/ ...

  8. 软件测试第三次作业——7.使用下面方法printPrimes()完成后面的问题(a)~(f)

    (a)控制流图如下: (b)令MAXPRIMES=4,会出现越界错误. (c)令n=1,不会经过while循环体. (d)节点覆盖:{1,2,3,4,5,6,7,8,9,10,11,12,13,14, ...

  9. Pyhon环境搭建-window

    1.安装python3.4.3版本 地址:(64位)https://www.python.org/ftp/python/3.4.3/python-3.4.3.amd64.msi (32位)http:/ ...

  10. Magento显示多货币,Magento 多货币设置

    System - Configuration - Currency Setup 在右边Currency Options里的Allowed currencies勾选, 然后 System - Manag ...