2 - Binary Search & LogN Algorithm - Apr 18
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
要知道最坏情况下,[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
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的更多相关文章
- 2 - Binary Search & LogN Algorithm
254. Drop Eggs https://www.lintcode.com/problem/drop-eggs/description?_from=ladder&&fromId=1 ...
- 将百分制转换为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 ...
- [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 ...
- [Algorithms] Binary Search Algorithm using TypeScript
(binary search trees) which form the basis of modern databases and immutable data structures. Binary ...
- 【437】Binary search algorithm,二分搜索算法
Complexity: O(log(n)) Ref: Binary search algorithm or 二分搜索算法 Ref: C 版本 while 循环 C Language scripts b ...
- js binary search algorithm
js binary search algorithm js 二分查找算法 二分查找, 前置条件 存储在数组中 有序排列 理想条件: 数组是递增排列,数组中的元素互不相同; 重排 & 去重 顺序 ...
- [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 ...
- [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 ...
- [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 ...
随机推荐
- Mac截图操作,自定义快捷键
选择system preferences 下面能看到系统定义的快捷键,可以自己修改
- C#中DataTable与XML格式的相互转换
1.DataTable转换成XML public string ConvertDataTableToXML(DataTable xmlDS) { MemoryStream stream = null; ...
- 安装rlwrap-0.37.tar.gz
1.解压下载好的rlwrap文件 [root@wangliping tool]# tar -zxvf rlwrap-0.37.tar.gz 2.进入解压好的文件[root@wangliping too ...
- 百度站内搜索https不可用切换api搜索,加上谷歌api站内搜索
google推https几年了,百度开始宣传全面https,但是,百度站内搜索 自己的服务却不走https,接口报错.百度分享也是. 然后采用http://search.zhoulujun.cn/cs ...
- 在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP
如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...
- 【转】Anaconda下安装pyecharts步骤及常见错误
本文转载自:https://blog.csdn.net/skj1995/article/details/81187954 (1)之前看了几篇博客,有人说用cmd命令在目录C:\Users\Admini ...
- 2018-2019-2 网络对抗技术 20165316 Exp4 恶意代码分析
2018-2019-2 网络对抗技术 20165316 Exp4 恶意代码分析 一.原理与实践说明 1.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2 ...
- spring aop 切面编程
import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Ha ...
- Linux 下 ls -l 命令执行显示结果的每一列含义【转载】
转自:zhuoya_的博客 原文地址>>https://blog.csdn.net/zhuoya_/article/details/77418413
- kafka 控制台命令
后台启动:bin/kafka-server-start.sh config/server.properties > /dev/null 2>&1 & 启动生产者:bin/k ...