第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; }