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
原创粉丝点击