用 O(1) 时间检测整数 n 是否是 2 的幂次。
样例
n=4
,返回 true
;
n=5
,返回 false
.
注意
O(1) 时间复杂度
1 class Solution { 2 /* 3 * @param n: An integer 4 * @return: True or false 5 */ 6 public boolean checkPowerOf2(int n) { 7 // write your code here 8 if(n==1){ 9 return true; 10 }else if(n<=0||n%2==1){ 11 return false; 12 }else{ 13 while(n>1){ 14 n=n/2; 15 if(n==1) return true; 16 if(n%2==1) return false; 17 } 18 } 19 return true; 20 } 21 };
写出一个高效的算法来搜索 m × n矩阵中的值。
这个矩阵具有以下特性:
- 每行中的整数从左到右是排序的。
- 每行的第一个数大于上一行的最后一个整数
考虑下列矩阵:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
给出 target = 3
,返回 true
我使用的是二分法,最传统的查找,当然也过了,不过在学习过程中发现了别人更好的代码
1 public class Solution { 2 /** 3 * @param matrix, a list of lists of integers 4 * @param target, an integer 5 * @return a boolean, indicate whether matrix contains target 6 */ 7 public boolean searchMatrix(int[][] matrix, int target) { 8 // write your code here 9 int left = 0; 10 int right = matrix.length-1; 11 if(left!=right){ 12 while(left<=right){ 13 int middle=(right+left)/2; 14 if(matrix[middle][0]<target){ 15 left = middle +1; 16 }else if(matrix[middle][0]>target){ 17 right = middle -1; 18 }else { 19 return true; 20 } 21 } 22 23 } 24 if(right < 0 ){ 25 return false; 26 } 27 else{ 28 int row = right; 29 left = 0; 30 right = matrix[row].length -1; 31 if(left!=right){ 32 while(left<=right){ 33 int middle=(right+left)/2; 34 if(matrix[row][middle]<target){ 35 left = middle +1; 36 }else if(matrix[row] [middle]>target){ 37 right = middle -1; 38 }else { 39 return true; 40 } 41 } 42 } 43 44 } 45 return false; 46 } 47 }
1 public class Solution { 2 /** 3 * @param matrix, a list of lists of integers 4 * @param target, an integer 5 * @return a boolean, indicate whether matrix contains target 6 */ 7 public boolean searchMatrix(int[][] matrix, int target) { 8 // write your code here 9 int i=0; 10 int j=matrix[0].length -1; 11 while (i <matrix.lenght&&j>=0){ 12 if(matrix[i][j]==target){ 13 return true; 14 }else if (target < matrix[i][j]){ 15 j--; 16 }else { 17 i++; 18 } 19 return false; 20 } 21 }
http://www.leetcode.com/2010/10/searching-2d-sorted-matrix.html 附上这个分析思路很不错的帖子。题目虽然不难,但也是有陷阱的