-
Notifications
You must be signed in to change notification settings - Fork 0
/
Feb_23.cpp
76 lines (74 loc) · 1.88 KB
/
Feb_23.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
Question:
Write an efficient algorithm that searches for a target value in an m x n integer matrix. The matrix has the following properties:
Integers in each row are sorted in ascending from left to right.
Integers in each column are sorted in ascending from top to bottom.
Input: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
Output: true
*/
#include<iostream>
using namespace std;
#include <set>
#include <string>
#include <vector>
#include <map>
class Solution {
public:
bool binary_search(vector<int>v,int t)
{
int l=0,r=v.size()-1;
while(l<=r)
{
int mid=(l+r)/2;
if(t==v[mid])
return true;
if(t<v[mid])
r=mid-1;
else
l=mid+1;
}
return false;
}
bool searchMatrix_1(vector<vector<int>>& matrix, int target) //Using Binary search(Got TLE on 1 case!)
{
int flg=0;
for(auto e:matrix)
{
if(e[0]>target)
break;
if(e[0]<=target && e[e.size() -1]>=target)
{
if(binary_search(e,target))
return true;
}
}
return false;
}
bool searchMatrix_2(vector<vector<int>>& matrix, int target) //Accepted O(n+m)
{
int x=0,y=matrix[0].size() -1;
while(x<matrix.size() && y>=0)
{
if(matrix[x][y]==target)
return true;
if(matrix[x][y] > target)
y--;
else
x++;
}
return false;
}
};
int main()
{
Solution d;
vector<vector<int>> vect
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
cout<<d.searchMatrix_2(vect,9);
//output:1
return 0;
}