第18天--算法(Leetcode 33,34,36)
33.搜索旋转排序数组
public int search(int[] nums, int target) {
if(nums == null || nums.length == 0) {
return -1;
}
int left = 0;
int mid = 0;
int right = nums.length - 1;
while(left <= right) {
mid = (left + right) >> 1;
if(nums[mid] == target) {
return mid;
}
if(nums[left] == nums[mid] && nums[mid] == nums[right]) {
while(left < mid && nums[left] == nums[mid]) {
left ++;
}
if(left == mid) {
left = mid + 1;
continue;
}
}else {
if(nums[left] < nums[mid]) {
if(target >= nums[left] && target <= nums[mid]) {
right = mid - 1;
continue;
}else {
left = mid + 1;
continue;
}
}else if(nums[left] > nums[mid]){
if(target >= nums[mid] && target <= nums[right]) {
left = mid + 1;
continue;
}else {
right = mid - 1;
continue;
}
}else {
left = mid + 1;
}
}
}
return -1;
}
34. 在排序数组中查找元素的第一个和最后一个位置
public int[] searchRange(int[] nums, int target) {
int res[] = {-1,-1};
if(nums == null || nums.length == 0) {
return res;
}
res[0] = f(nums,target);
res[1] = g(nums,target);
return res;
}
public int f(int nums[],int target) {
int left = 0;
int right = nums.length - 1;
int mid = 0;
int ans = -1;
while(left <= right) {
mid = (left + right) >> 1;
if(nums[mid] > target) {
right = mid - 1;
}else if(nums[mid] < target) {
left = mid + 1;
}else {
ans = mid;
right = mid - 1;
}
}
return ans;
}
public int g(int nums[],int target) {
int left = 0;
int right = nums.length - 1;
int mid = 0;
int ans = -1;
while(left <= right) {
mid = (left + right) >> 1;
if(nums[mid] > target) {
right = mid - 1;
}else if(nums[mid] < target) {
left = mid + 1;
}else {
ans = mid;
left = mid + 1;
}
}
return ans;
}
36.有效的数独
public boolean isValidSudoku(char[][] board) {
boolean row[][] = new boolean[9][10];
boolean col[][] = new boolean[9][10];
boolean ge[][] = new boolean[9][10];
for(int i = 0;i < 9;i ++) {
for(int j = 0;j < 9;j ++) {
if(board[i][j] != '.') {
int num = board[i][j] - '0';
int k = 3 * (i / 3) + j / 3;
if(row[i][num] || col[j][num] || ge[k][num]) {
return false;
}
row[i][num] = true;
col[j][num] = true;
ge[k][num] = true;
}
}
}
return true;
}