35.搜索插入位置
搜索插入位置題目鏈接
方法一:因爲順序是從小到大,利用一個for循環找出第一個下標大於或者等於給定值,找不到就返回數組的長度
public int searchInsert(int[] nums, int target) {
for(int i=0;i<nums.length;i++){
if(nums[i]>=target){
return i;
}
}
return nums.length;
}
方法二:因爲順序是從小到大,所以可以用二分法,可能是因爲測試數據太小了,按理來說二分法效率比方法一高出不少…
public int searchInsert(int[] nums, int target) {
int left = 0,right = nums.length - 1;
while(left<=right){
int mid = (left+right)/2;
if(nums[mid]<target){
left = mid+1;
}else if(target<nums[mid]){
right = mid-1;
}else{
return mid;
}
}
return left;
}
38.報數
報數題目鏈接
private StringBuilder [ ] stringBuilder;
public String countAndSay ( int n) {
init ( n) ;
return stringBuilder[ n- 1 ] . toString ( ) ;
}
private void init ( int n) {
stringBuilder = new StringBuilder [ n] ;
stringBuilder[ 0 ] = new StringBuilder ( "1" ) ;
for ( int i= 1 ; i< n; i++ ) {
stringBuilder[ i] = new StringBuilder ( "" ) ;
char num1 = stringBuilder[ i- 1 ] . toString ( ) . charAt ( 0 ) ;
int count = 0 ;
for ( int j= 0 ; j< stringBuilder[ i- 1 ] . length ( ) ; j++ ) {
char num2 = stringBuilder[ i- 1 ] . toString ( ) . charAt ( j) ;
if ( num1== num2) {
count++ ;
}
else {
stringBuilder[ i] . append ( count) . append ( num1) ;
num1= num2;
count= 1 ;
}
}
stringBuilder[ i] . append ( count) . append ( num1) ;
}
}