39. 数组中出现次数超过一半的数字
class Solution {
public :
int majorityElement ( vector< int > & nums) {
sort ( nums. begin ( ) , nums. end ( ) ) ;
return nums[ ( nums. size ( ) - 1 ) / 2 ] ;
}
} ;
40. 最小的k个数
class Solution {
public :
vector< int > getLeastNumbers ( vector< int > & arr, int k) {
sort ( arr. begin ( ) , arr. end ( ) ) ;
return vector< int > ( arr. begin ( ) , arr. begin ( ) + k) ;
}
} ;
41. 数据流中的中位数 //思路是错的我得在想想。。
在这里插入代码片
42. 连续子数组的最大和
class Solution {
public :
int maxSubArray ( vector< int > & nums) {
int tmp= nums[ 0 ] ;
int res = nums[ 0 ] ;
for ( int i= 1 ; i< nums. size ( ) ; i++ ) {
tmp = max ( tmp+ nums[ i] , nums[ i] ) ;
res = max ( res, tmp) ;
}
return res;
}
} ;
1~n 整数中 1 出现的次数
class Solution {
public :
int countDigitOne ( int n) {
}
} ;
44. 数字序列中某一位的数字
class Solution {
public :
int fun ( long long n) {
if ( n == 0 ) return 0 ;
long long l = 1 , m = 9 ;
while ( n > l * m) {
n - = l * m;
m * = 10 ;
l ++ ;
}
n - = 1 ;
long long nn = pow ( 10 , l - 1 ) + n / l;
string ss = to_string ( nn) ;
return ss[ n % l] - '0' ;
}
int findNthDigit ( int n) {
return fun ( n) ;
}
} ;
45. 把数组排成最小的数 好难理解,,,,,,这个答案不是自己想的。。。。。
class Solution {
public :
string minNumber ( vector< int > & nums) {
vector< string> strs;
string res;
for ( auto num: nums)
strs. push_back ( to_string ( num) ) ;
sort ( strs. begin ( ) , strs. end ( ) , compare) ;
for ( auto str: strs)
res+ = str;
return res;
}
private :
static bool compare ( const string & a, const string & b)
{
return a+ b< b+ a;
}
} ;
46. 把数字翻译成字符串
class Solution {
public :
int translateNum ( int num) {
if ( num <= 9 ) return 1 ;
int tmp = num% 100 ;
if ( tmp> 9 && tmp< 26 ) {
return translateNum ( num/ 100 ) + translateNum ( num/ 10 ) ;
} else {
return translateNum ( num/ 10 ) ;
}
}
} ;
47. 礼物的最大价值
class Solution {
public :
int maxValue ( vector< vector< int >> & grid) {
int row = grid. size ( ) ;
int col = grid[ 0 ] . size ( ) ;
vector< int > dp ( col+ 1 , 0 ) ;
for ( int i = 0 ; i < row; i++ ) {
for ( int j = 0 ; j < col; j++ ) {
dp[ j+ 1 ] = max ( dp[ j] , dp[ j+ 1 ] ) + grid[ i] [ j] ;
}
}
return dp[ col] ;
}
} ;
48. 最长不含重复字符的子字符串
class Solution {
public :
int lengthOfLongestSubstring ( string s) {
int n = s. size ( ) , res = 1 ;
int begin= 0 ;
if ( s. length ( ) == 0 || s. length ( ) == 1 ) return s. length ( ) ;
for ( int i= 1 ; i< n; i++ ) {
for ( int j = begin; j< i; j++ ) {
if ( s[ i] == s[ j] ) {
begin = j+ 1 ;
break ;
}
}
res = max ( res, i- begin+ 1 ) ;
}
return res;
}
} ;
49. 丑数
class Solution {
public :
int nthUglyNumber ( int n) {
vector< int > num ( n, 0 ) ;
num[ 0 ] = 1 ;
int idx_a= 0 , idx_b= 0 , idx_c= 0 ;
for ( int i= 1 ; i< n; i++ ) {
num[ i] = min ( min ( num[ idx_a] * 2 , num[ idx_b] * 3 ) , num[ idx_c] * 5 ) ;
if ( num[ i] == num[ idx_a] * 2 ) idx_a++ ;
if ( num[ i] == num[ idx_b] * 3 ) idx_b++ ;
if ( num[ i] == num[ idx_c] * 5 ) idx_c++ ;
}
return num[ n- 1 ] ;
}
} ;
50. 第一个只出现一次的字符
class Solution {
public :
char firstUniqChar ( string s) {
unordered_map< char , int > map;
for ( char c: s) map[ c] ++ ;
for ( char c: s) if ( map[ c] == 1 ) return c;
return ' ' ;
}
} ;
51. 数组中的逆序对
不会,没思路,暴力超时,想起来在写。。
52. 两个链表的第一个公共节点 这是套路题直接背就完事了
class Solution {
public :
ListNode * getIntersectionNode ( ListNode * headA, ListNode * headB) {
ListNode* a= headA;
ListNode* b= headB;
while ( a!= b) {
a = a!= NULL ? a- > next: headB;
b = b!= NULL ? b- > next: headA;
}
return b;
}
} ;