LeetCode074 Search a 2D Matrix
来源:互联网 发布:淘宝手机详情页宽度 编辑:程序博客网 时间:2024/06/08 10:34
详细见:leetcode.com/problems/search-a-2d-matrix
Java Solution: github
package leetcode;public class P074_SearchA2DMatrix {public static void main(String[] args) {System.out.println(new Solution().searchMatrix(new int[][] {{1, 3, 5, 7},{10, 11, 16, 20},{23, 30, 34, 50},}, 50));}/* * 一次AC * 1 ms * 还是需要注意二分时候的判断条件 */static class Solution { public boolean searchMatrix(int[][] matrix, int target) { int cow = matrix.length, col = matrix[0].length; int sti = 0, eni = cow * col - 1; while (sti <= eni) { int mid = ( sti + eni ) >> 1; int coi = mid / col, coj = mid - coi * col; if (matrix[coi][coj] == target) return true; else if (matrix[coi][coj] > target) eni = mid - 1; else sti = mid + 1; } return false; }}}
C Solution: github
/* url: leetcode.com/problems/search-a-2d-matrix AC 3ms 25.86%*/#include <stdio.h>#include <stdlib.h>#define bool intbool search(int** m, int ri, int ci, int rj, int cj, int rn, int cn, int t) { int rm = (ri+rj) / 2, cm = (ci+cj) / 2; if (rm < 0 || rm >= rn) return 0; if (cm < 0 || cm >= cn) return 0; if (m[rm][cm] == t) return 1; if (ri > rj || ci > cj) return 0; if (m[rm][cm] > t) { return search(m, ri, ci, rm-1, cj, rn, cn, t) || search(m, rm, ci, rj, cm-1, rn, cn, t); } return search(m, ri, cm+1, rj, cj, rn, cn, t) || search(m, rm+1, ci, rj, cm+1, rn, cn, t);}bool searchMatrix(int** m, int rn, int cn, int t) { return search(m, 0, 0, rn-1, cn-1, rn, cn, t);}int main() { int** m = (int**) malloc(sizeof(int*) * 3); int m0[] = {1, 3, 5, 7}; int m1[] = {10,11,16,20}; int m2[] = {23,30,34,50}; m[0] = m0; m[1] = m1; m[2] = m2; printf("answer is %d\r\n", searchMatrix(m, 3, 4, 3));}
Python Solution: github
#coding=utf-8''' url: leetcode.com/problems/search-a-2d-matrix/ @author: zxwtry @email: zxwtry@qq.com @date: 2017年4月17日 @details: Solution: 55ms 36.01%'''class Solution(object): def search(self, m, ri, ci, rj, cj, rn, cn, t): rm, cm = (ri + rj) // 2, (ci + cj) // 2 if rm < 0 or rm >= rn: return False if cm < 0 or cm >= cn: return False if m[rm][cm] == t: return True if ri > rj or ci > cj: return False if m[rm][cm] > t: return self.search(m, ri, ci, rm-1, cj, rn, cn, t) \ or self.search(m, rm, ci, rj, cm-1, rn, cn, t) return self.search(m, ri, cm+1, rj, cj, rn, cn, t) \ or self.search(m, rm+1, ci, rj, cm, rn, cn, t) def searchMatrix(self, m, t): """ :type m: List[List[int]] :type t: int :rtype: bool """ if m == None or len(m) == 0: return False if m[0] == None or len(m[0]) == 0: return False rn, cn = len(m), len(m[0]) return self.search(m, 0, 0, rn-1, cn-1, rn, cn, t)
0 0
- LeetCode074 Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D matrix
- Tomcat servlet工作原理
- LeetCode073 Set Matrix Zeroes
- manifest文件的常用配置项
- 动态规划 24题
- 修饰符
- LeetCode074 Search a 2D Matrix
- StringHelper--封转自己的字符串工具类
- Spring框架介绍和IoC容器中Bean配置(Spring框架)
- ICMP报文和ping命令
- 一些JavaScript小技巧
- leetcode [Contains Duplicate]//待整理多种解法
- SRM 556 Div1 500
- java源码Integer类toBinaryString()方法探究
- 二分图的匹配