首先计算每个数在最大递增子串中的位置
186 186 150 200 160 130 197 200 quene
1 1 1 2 2 1 3 4 递增计数
然后计算每个数在反向最大递减子串中的位置--->计算反向后每个数在最大递增子串中的位置
200 197 130 160 200 150 186 186 反向quene
1 1 1 2 3 2 3 3 递减计数
然后将每个数的递增计数和递减计数相加
186 186 150 200 160 130 197 200 quene
1 1 1 2 2 1 3 4 递增计数
3 3 2 3 2 1 1 1 递减计数
4 4 3 5 4 2 4 5 每个数在所在队列的人数+1(自己在递增和递减中被重复计算)
如160这个数
在递增队列中有2个人数
150 160
在递减队列中有2个人数
160 130
那么160所在队列中就有3个人
150 160 130
每个数的所在队列人数表达就是这个意思
总人数 - 该数所在队列人数 = 需要出队的人数
1 链接:https://www.nowcoder.com/questionTerminal/6d9d69e3898f45169a441632b325c7b4 2 来源:牛客网 3 4 #include <iostream> 5 #include <string> 6 #include <vector> 7 #include <algorithm> 8 #include <iomanip> 9 #include <math.h> 10 using namespace std; 11 12 int main() 13 { 14 int n; 15 while (cin >> n) 16 { 17 vector<int> vec(n), dp(n), dq(n); 18 int i, k, j, ma = 0; 19 for (i = 0; i < n; ++i) 20 { 21 cin >> vec[i]; 22 dp[i] = 1; 23 dq[i] = 1; 24 } 25 for (i = 1; i < n; ++i) 26 { 27 for (j = 0; j < i; ++j) 28 { 29 if (vec[i] > vec[j]) 30 dp[i] = max(dp[i], dp[j] + 1); 31 } 32 } 33 for (i = n - 2; i >= 0; --i) 34 { 35 for (j = n - 1; j > i; --j) 36 { 37 if (vec[i] > vec[j]) 38 dq[i] = max(dq[i], dq[j] + 1); 39 } 40 } 41 for (i = 0; i < n; ++i) 42 ma = max(ma, dp[i] + dq[i] - 1); 43 cout << n - ma << endl; 44 } 45 return 0; 46 }
001题目描述
计算字符串最后一个单词的长度,单词以空格隔开。
输入描述:
一行字符串,非空,长度小于5000。
输出描述:
整数N,最后一个单词的长度。
示例1
输入
hello world
输出
5
思路::遍历一遍找到空格个数,在遍历一遍定位最后一个空格 然后总长度减去定位 就是最后一个字母的长度
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 char a[5000]; //定义一个char数组 8 gets(a); //把字符串读入字符串数组 9 int m=0,n=0,sum=0; 10 for (int i = 0; a[i]!='