1. 普通的二分法查找查找等于target的数字

2. 还可以查找小于target的数字中最小的数字和大于target的数字中最大的数字

由于新的查找结果总是比旧的查找结果更接近于target,因此只需不停更新result

3. 查找最接近于target的数字

这种情况下,新的查找结果不一定比旧的查找结果更接近target,所以要比较他们与target的差值。

题目:

74. Search a 2D Matrix

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

  • Integers in each row are sorted from left to right.
  • The first integer of each row is greater than the last integer of the previous row.

For example,

Consider the following matrix:

[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]

Given target = 3, return true.

查找第一列中大于target的index1,查找最后一列中小于target的index2

数字在index1< n < index2列中

在每一列中再使用二分法

33. Search in Rotated Sorted Array

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

public class Solution {
public int search(int[] nums, int target) {
int length = nums.length;
int start = 0;
int end = length - 1;
while (start <= end) {
int mid = start + (end - start) / 2;
int midNum = nums[mid];
if (midNum == target) {
return mid;
}
int startNum = nums[start];
if (startNum <= midNum) {
if (midNum < target) {
start = mid + 1;
} else {
if (startNum == target) {
return start;
} else if (startNum < target) {
end = mid - 1;
} else {
start = mid + 1;
}
}
} else {
if (midNum > target) {
end = mid - 1;
} else {
int endNum = nums[end];
if (endNum == target) {
return end;
} else if (endNum > target) {
start = mid + 1;
} else {
end = mid - 1;
}
}
}
}
return -1;
}
}

81. Search in Rotated Sorted Array II

Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

Write a function to determine if a given target is in the array.

为了防止最坏情况的出现,从头搜到尾。。。

具体解释见九章算法

Search in Rotated Sorted Array II

162. Find Peak Element

A peak element is an element that is greater than its neighbors.

Given an input array where num[i] ≠ num[i+1], find a peak element and return its index.

The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.

You may imagine that num[-1] = num[n] = -∞.

For example, in array [1, 2, 3, 1], 3 is a peak element and your function should return the index number 2.

click to show spoilers.

Note:

Your solution should be in logarithmic complexity.

public class Solution {
public int findPeakElement(int[] nums) {
int length = nums.length;
if (length == 0) {
return 0;
}
if (length == 1) {
return 0;
}
if (nums[0] > nums[1]) {
return 0;
}
if (nums[length - 1] > nums[length - 2]) {
return length - 1;
}
int start = 1;
int end = length - 2;
while (start + 1 < end) {
int mid = start + (end - start) / 2;
if (nums[mid - 1] < nums[mid]) {
start = mid;
} else if (nums[mid] > nums[mid + 1]) {
end = mid - 1;
} else {
end = mid - 1;
}
}
if (nums[start] >= nums[end]) {
return start;
} else {
return end;
}
}
}

[leetcode] 题型整理之查找的更多相关文章

  1. [leetcode] 题型整理之二叉树

    94. Binary Tree Inorder Traversal Given a binary tree, return the inorder traversal of its nodes' va ...

  2. [leetcode] 题型整理之动态规划

    动态规划属于技巧性比较强的题目,如果看到过原题的话,对解题很有帮助 55. Jump Game Given an array of non-negative integers, you are ini ...

  3. [leetcode] 题型整理之排列组合

    一般用dfs来做 最简单的一种: 17. Letter Combinations of a Phone Number Given a digit string, return all possible ...

  4. [leetcode] 题型整理之数字加减乘除乘方开根号组合数计算取余

    需要注意overflow,特别是Integer.MIN_VALUE这个数字. 需要掌握二分法. 不用除法的除法,分而治之的乘方 2. Add Two Numbers You are given two ...

  5. [leetcode] 题型整理之cycle

    找到环的起点. 一快一慢相遇初,从头再走再相逢.

  6. [leetcode]题型整理之用bit统计个数

    137. Single Number II Given an array of integers, every element appears three times except for one. ...

  7. [leetcode] 题型整理之图论

    图论的常见题目有两类,一类是求两点间最短距离,另一类是拓扑排序,两种写起来都很烦. 求最短路径: 127. Word Ladder Given two words (beginWord and end ...

  8. [leetcode] 题型整理之排序

    75. Sort Colors Given an array with n objects colored red, white or blue, sort them so that objects ...

  9. [leetcode] 题型整理之字符串处理

    71. Simplify Path Given an absolute path for a file (Unix-style), simplify it. For example,path = &q ...

随机推荐

  1. 架构师养成记--4.volatile关键字

    volatile修饰的变量可在多个线程间可见. 如下代码,在子线程运行期间主线程修改属性值并不对子线程产生影响,原因是子线程有自己独立的内存空间,其中有主内存中的变量副本. public class ...

  2. C#------连接SQLServer和MySQL字符串

    <connectionStrings> <add name="ConnectionStrings" connectionString="Data Sou ...

  3. (转)解决bootstrap 模态框的页面抖动

    使用bootstrap时,往往会出现页面抖动的效果,使得用户体验十分不友好. Bootstrap为了让所有的页面(这里指内容溢出和不溢出)显示效果一样,采取的方法如下: 当Modal显示时,设置bod ...

  4. Web jquery表格组件 JQGrid 的使用 - 11.问题研究

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  5. 忍不住记录下小型的CMDB系统

  6. 在Application中集成Microsoft Translator服务之优化

    在一篇文章中我们已经实现了功能,但是一个明显的问题是响应时间非常长,用户体验非常糟糕,这篇文章将带你找出问题所在并进行优化 为了找出追魁祸首,这里使用 System.Diagnostics.Stopw ...

  7. [Centos 6]升级安装GCC(2)

    摘要 上篇文章升级了下gcc,但发现并没有起到作用. 安装 上篇文章: 升级GCC 升级之后,检查gcc版本 strings /usr/lib/libstdc++.so. | grep GLIBCXX ...

  8. JAVA关键字与保留字说明及使用

    1.abstract 2.boolean 3.break 4.byte 5.case 6.catch 7.char 8.class 9.continue 10.default 11.do 12.dou ...

  9. hzwer模拟赛 感冒病毒

    题目描述 Description 一种感冒病毒正在学校里传播,这所学校有n个学生,m个学生社团,每个学生可能参加了多个社团,因为同一个社团的学生交流较多,所以如果一个学生感染上感冒病毒,那么他所在的社 ...

  10. STM32F103之DMA

    一.背景: 需要使用STM32的DAC,例程代码中用了DMA,对DMA之前没有实际操作过,也很早就想知道DMA到底是什么,因此,看了一下午手册,代码和网上的资料,便有了此篇文章,做个记录. 二.正文: ...