马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
目次
排序⼦序列(模仿)
标题分析
讲授算法原理
编写代码
淘汰整数(贪⼼)
标题分析
讲授算法原理
编写代码
排序⼦序列(模仿)
标题分析
1.标题链接:排序子序列_牛客笔试题_牛客网
2.标题形貌
牛牛界说排序子序列为一个数组中一段一连的子序列,而且这段子序列好坏递增大概非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个使命是把数组A分为多少段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.
如样例所示,牛牛可以把数组A分别为[1,2,3]和[2,2,1]两个排序子序列,至少须要分别为2个排序子序列,以是输出2
输入形貌:
输入的第一运动一个正整数n(1 ≤ n ≤ 10^5)
第二行包罗n个整数A_i(1 ≤ A_i ≤ 10^9),体现数组A的每个数字。
输出形貌:
输出一个整数体现牛牛可以将A最少分别为多少段排序子序列
示例1
输入
6
1 2 3 2 2 1
输出
2
讲授算法原理
解法:
算法思绪:
根据题意,⽤指针模仿即可。
(注意:本道题的测试数据不严谨,有大概错误的代码也能提交过~)
编写代码
c++算法代码:
- #include <iostream>
- using namespace std;
- const int N = 1e5 + 10;
- int n;
- int arr[N];
- int main()
- {
- cin >> n;
- for(int i = 0; i < n; i++) cin >> arr[i];
- int ret = 0, i = 0; while(i < n)
- {
- if(i == n - 1)
- {
- ret++;
- break;
- }
- if(arr[i] < arr[i + 1])
- {
- while(i + 1 < n && arr[i] <= arr[i + 1]) i++; ret++;
- }
- else if(arr[i] > arr[i + 1])
- {
- while(i + 1 < n && arr[i] >= arr[i + 1]) i++; ret++;
- }
- else
- {
- while(i + 1 < n && arr[i] == arr[i + 1]) i++;
- }
- i++;
- }
- cout << ret << endl;
- return 0;
- }
复制代码 java算法代码:
- import java.util.Scanner;
- // 注意类名必须为 Main, 不要有任何 package xxx 信息
- public class Main
- {
- public static void main(String[] args)
- {
- Scanner in = new Scanner(System.in); int n = in.nextInt(); int[] arr = new int[n]; for(int i = 0; i < n; i++) { arr[i] = in.nextInt();
- }
- int ret = 0, i = 0; while(i < n)
- {
- if(i == n - 1)
- {
- ret++; break; }
- if(arr[i] < arr[i + 1])
- {
- while(i + 1 < n && arr[i] <= arr[i + 1]) i++; ret++;
- }
- else if(arr[i] > arr[i + 1])
- {
- while(i + 1 < n && arr[i] >= arr[i + 1]) i++; ret++;
- }
- else
- {
- while(i + 1 < n && arr[i] == arr[i + 1]) i++;
- }
- i++;
- }
- System.out.println(ret);
- }
- }
复制代码 淘汰整数(贪⼼)
标题分析
1.标题链接:登录—专业IT笔试口试备考平台_牛客网
2.标题形貌
链接:登录—专业IT笔试口试备考平台_牛客网
泉源:牛客网
标题形貌
给出一个正整数H,从1开始减,第一次必须减1,每次减的数字都必须和上一次雷同大概是上一次的两倍,叨教最少须要反复能把H恰恰减到0。
输入形貌:
第一行给出一个正整数T{T}T,1≤T≤1041 \le T \le 10^41≤T≤104
接下来T行每行一个H,1≤H≤109H,1 \le H \le 10^9H,1≤H≤109
输出形貌:
每行一个正整数代表最少的次数
示例1
输入
3 3 5 7
3
3
5
7
输出
2 3 3
2
3
3
讲授算法原理
解法:
算法思绪:
贪⼼+数学。
a. 尽大概的翻倍;
b. 不能⽆脑翻倍,只能是 2 * cur 的倍数时,才气翻倍。
编写代码
c++算法代码:
- #include <iostream>
- using namespace std;
- int t, h;
- int fun()
- {
- int ret = 0, a = 1;
- while(h)
- {
- h -= a;
- ret++;
- if(h % (a * 2) == 0)
- {
- a *= 2;
- }
- }
- return ret;
- }
- int main()
- {
- cin >> t;
- while(t--)
- {
- cin >> h;
- cout << fun() << endl;
- }
-
- return 0;
- }
复制代码 java算法代码:
- import java.util.*;
- public class Main
- {
- public static void main(String[] args)
- {
- Scanner in = new Scanner(System.in); int t = in.nextInt(); while(t-- != 0)
- {
- int h = in.nextInt(); int ret = 0, a = 1; while(h != 0)
- {
- h -= a; ret++; if(h % (a * 2) == 0) {
- a *= 2;
- }
- }
- System.out.println(ret);
- }
- }
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |