找出缺失的数字
public class Solution {
public int solve ( int [ ] a) {
int left = 0 , right = a. length- 1 ;
while ( left< right) {
int mid = ( left+ right) / 2 ;
if ( a[ mid] == mid) left= mid+ 1 ;
else right = mid- 1 ;
}
return left== a[ left] ? left+ 1 : left;
}
}
正常的二分查找
int i= 0 , j= nums. length- 1 ;
while ( i<= j) {
int mid = ( i+ j) / 2 ;
if ( nums[ mid] == target) {
有重复数字情况
}
return mid+ 1 ;
}
else if ( nums[ mid] > target) j= mid- 1 ;
else i= mid+ 1 ;
}
return - 1 ;
三个数的和,固定一位
ArrayList < ArrayList < Integer > > ans = new ArrayList < > ( ) ;
Arrays . sort ( num) ;
for ( int i= 0 ; i< num. length- 2 ; i++ ) {
if ( i> 0 && num[ i] == num[ i- 1 ] ) continue ;
if ( num[ i] > 0 ) break ;
int temp = - num[ i] ;
int left = i+ 1 , right = num. length- 1 ;
while ( left< right) {
int sum = num[ left] + num[ right] ;
ArrayList < Integer > res = new ArrayList < > ( ) ;
if ( sum== temp) {
res. add ( num[ i] ) ;
res. add ( num[ left] ) ;
res. add ( num[ right] ) ;
ans. add ( res) ;
while ( left< right&& num[ left] == num[ left+ 1 ] ) left++ ;
while ( left< right&& num[ right] == num[ right- 1 ] ) right-- ;
left++ ;
right-- ;
}
else if ( sum< temp) left++ ;
else right-- ;