38. Search a 2D Matrix II

https://www.lintcode.com/problem/search-a-2d-matrix-ii/description?_from=ladder&&fromId=1

这道题与二分法有什么关系呢?

  -把整个二维数组从对角线分成两半,从左下角开始,往右上角逼近。

 public class Solution {
/**
* @param matrix: A list of lists of integers
* @param target: An integer you want to search in matrix
* @return: An integer indicate the total occurrence of target in the given matrix
*/
public int searchMatrix(int[][] matrix, int target) {
// write your code here
if(matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return 0;
}
int row = matrix.length - 1, col = matrix[0].length - 1;
int r = row, c = 0;
int result = 0;
while(r >= 0 && c <= col) {
if(matrix[r][c] == target) {
result++;
c++;
r--;
} else if(matrix[r][c] < target) {
c++;
} else if(matrix[r][c] > target) {
r--;
}
}
return result;
}
}

457. Classical Binary Search

https://www.lintcode.com/problem/classical-binary-search/description?_from=ladder&&fromId=1

很简单,套用模版即可

 public class Solution {
/**
* @param nums: An integer array sorted in ascending order
* @param target: An integer
* @return: An integer
*/
public int findPosition(int[] nums, int target) {
// write your code here
if(nums == null || nums.length == 0) return -1;
int start = 0, end = nums.length - 1;
while(start + 1 < end) {
int mid = start + (end - start) / 2;
if(nums[mid] == target) return mid;
if(nums[mid] < target) {
start = mid;
} else {
end = mid;
}
}
if(nums[start] == target) {
return start;
} else if(nums[end] == target) {
return end;
}
return -1;
}
}

141. Sqrt(x)

https://www.lintcode.com/problem/sqrtx/description?_from=ladder&&fromId=1

凡是 平方、移位,一定要类型转换!!!转换成 long !!!

套用模版即可

 public class Solution {
/**
* @param x: An integer
* @return: The sqrt of x
*/
public int sqrt(int x) {
// write your code here
if(x < 0) return -1;
long start = 0;
long end = x;
long xl = (long)x;
while(start + 1 < end) {
long mid = start + (end - start) / 2;
if(mid * mid == xl) {
return (int)(mid);
} else if(mid * mid > xl) {
end = mid;
} else {
start = mid;
}
}
if(end * end <= xl) {
return (int)(end);
} else {
return (int)(start);
}
}
}

617.  Maximum Average Subarray

https://www.lintcode.com/problem/maximum-average-subarray-ii/note/171478

586. Sqrt(x) II

https://www.lintcode.com/problem/sqrtx-ii/description?_from=ladder&&fromId=1

牛顿迭代法。

public class Solution {
/**
* @param x: a double
* @return: the square root of x
*/
public double sqrt(double x) {
// write your code here
double result = 1.0;
while(Math.abs(x - result * result) > 1e-12) {
result = (result + x / result) / 2;
}
return result;
}
}

160. Find Minimum in Rotated Array II

https://www.lintcode.com/problem/find-minimum-in-rotated-sorted-array-ii/description?_from=ladder&&fromId=1

要知道最坏情况下,[1, 1, 1, .........., 1] 里有一个 0

这种情况使得时间复杂度必须是 O(n)

if mid equals to end, that means it's fine to remove end

the smallest element won't be removed

public class Solution {
/**
* @param nums: a rotated sorted array
* @return: the minimum number in the array
*/
public int findMin(int[] nums) {
// write your code here
if(nums == null || nums.length == 0) return 0;
int start = 0;
int end = nums.length - 1;
while(start + 1 < end) {
int mid = start + (end - start) / 2;
if(nums[mid] == nums[end]) {
end--;
}
if(nums[mid] > nums[end]) {
start = mid;
}
if(nums[mid] < nums[end]) {
end = mid;
}
}
return Math.min(nums[start], nums[end]);
}
}

63. Search in Rotated Sorted Array II

https://www.lintcode.com/problem/search-in-rotated-sorted-array-ii/description?_from=ladder&&fromId=1

 class Solution {
public boolean search(int[] nums, int target) {
if(nums == null || nums.length == 0) return false;
int start = 0;
int end = nums.length - 1;
int mid;
while(start + 1 < end){
mid = start + (end - start) / 2;
if(nums[mid] == target) return true;
if(nums[mid] > nums[start]){
if(target >= nums[start] && target <= nums[mid]){
end = mid;
}else{
start = mid;
}
}else if(nums[mid] < nums[start]){
if(target >= nums[mid] && target <= nums[end]){
start = mid;
}else{
end = mid;
}
}
else{
start++;
}
}
if(target == nums[start] || nums[end] == target) return true;
return false;
}
}

2 - Binary Search & LogN Algorithm - Apr 18的更多相关文章

  1. 2 - Binary Search & LogN Algorithm

    254. Drop Eggs https://www.lintcode.com/problem/drop-eggs/description?_from=ladder&&fromId=1 ...

  2. 将百分制转换为5分制的算法 Binary Search Tree ordered binary tree sorted binary tree Huffman Tree

    1.二叉搜索树:去一个陌生的城市问路到目的地: for each node, all elements in its left subtree are less-or-equal to the nod ...

  3. [Algorithm] Delete a node from Binary Search Tree

    The solution for the problem can be divided into three cases: case 1: if the delete node is leaf nod ...

  4. [Algorithms] Binary Search Algorithm using TypeScript

    (binary search trees) which form the basis of modern databases and immutable data structures. Binary ...

  5. 【437】Binary search algorithm,二分搜索算法

    Complexity: O(log(n)) Ref: Binary search algorithm or 二分搜索算法 Ref: C 版本 while 循环 C Language scripts b ...

  6. js binary search algorithm

    js binary search algorithm js 二分查找算法 二分查找, 前置条件 存储在数组中 有序排列 理想条件: 数组是递增排列,数组中的元素互不相同; 重排 & 去重 顺序 ...

  7. [Algorithm] Check if a binary tree is binary search tree or not

    What is Binary Search Tree (BST) A binary tree in which for each node, value of all the nodes in lef ...

  8. [Algorithm] Count occurrences of a number in a sorted array with duplicates using Binary Search

    Let's say we are going to find out number of occurrences of a number in a sorted array using binary ...

  9. [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 ...

随机推荐

  1. Python基础之数组和向量化计算总结

    一.多维数组 1.生成ndarray     (array函数) .np.array()生成多维数组 例如:import numpy as npdata1=[6,7.5,8,0,1]     #创建简 ...

  2. Leetcode: Find Permutation(Unsolve lock problem)

    By now, you are given a secret signature consisting of character 'D' and 'I'. 'D' represents a decre ...

  3. MongoDB基本信息

    一.MongoDB简介 来源:在2007年,由纽约一个叫10gen的创业团队开发,公司现在叫做MongoDB Inc,最初被开发为PAAS(平台即服务). 数据库类型:基于分布式文件存储的数据库.由C ...

  4. Mac OS X 下安装使用 Docker (2017年7月)

    两年前的一篇 Mac OS X 下安装使用 Docker 安装时还是用的 boot2docker, 如今进化到了在 Mac OS X 下用 Docker Toolbox, 而且命令也由 boot2do ...

  5. 用java语言通过POI实现word文档的按标题提取

    最近有一个项目需要将一个word文档中的数据提取到数据库中.就去网上查了好多资料,最靠谱的就是用poi实现word文档的提取. 喝水不忘挖井人,我查了好多资料就这个最靠谱,我的这篇博客主要是借鉴htt ...

  6. Click One客户端安装后将安装目录删除,再从服务器下载安装无法安装解决办法

    报错信息: 平台版本信息 Windows : 6.1.7601.65536 (Win32NT) Common Language Runtime : 4.0.30319.42000 System.Dep ...

  7. C#中类成员的执行顺序

    先进行细分: 类的成员分为:字段.属性.方法.构造方法 成员的修饰符:静态成员.实例成员 层次结构:父类.子类 先不考虑继承关系,执行顺序为: 静态字段静态构造方法实例字段实例构造方法属性和方法是在调 ...

  8. zimbra填坑记录

    邮件服务器上架,问题记录. 1.DNS解析设置,zimbra收发邮件均使用统一域名,mail.xxxx.com.cn,因此在做SMTP,POP,MX记录时均应指向此域名. 2.实际上架内部网络和安装所 ...

  9. 关于config文件中AppSettings和ConnectionStrings的用法跟区别(转)

    转自:http://www.cnblogs.com/bindot/archive/2013/03/07/def.html

  10. linux创建桌面快捷方式

    这里拿postman举例,其他的程序类似 在/usr/sharp/applications新建postman.desktop文件(终端下输入vim /usr/sharm/applications/po ...