35.最大乘积
题目链接
https://www.nowcoder.com/practice/5f29c72b1ae14d92b9c3fa03a037ac5f?tpId=90&&tqId=30776&rp=14&ru=/activity/oj&qru=/ta/2018test/question-ranking
题目描述
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
输入描述
输入共2行,第一行包括一个整数n,表示数组长度
第二行为n个以空格隔开的整数,分别为A1,A2, … ,An
输出描述
满足条件的最大乘积
示例1
输入
4
3 4 1 2
输出
24
题目分析
- 把整数从小到大排序。
- 取最大3个数的乘积。
- 取最大一个数和最小两个数乘积。(考虑到存在绝对值最大的两个负数)
- 取两个乘积中的最大值作为最后结果。
- 注意:定义数据类型时要定义为:long long型。
#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){
int n;
long long num[100000];
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%lld",&num[i]);
}
//从小到大排序
sort(num,num+n);
long long sum;
long long s1=1;
//最大3个数乘积
for(int j=n-1;j>=n-3;j--){
s1 *=num[j];
}
//最大一个数和最小两个数乘积
long long s2 = num[n-1];
for(int j=0;j<2;j++){
s2 *=num[j];
}
//取两个乘积中最大值
sum = max(s1,s2);
printf("%lld\n",sum);
}
return 0;
}
36.字符集合
题目链接
https://www.nowcoder.com/practice/784efd40ed8e465a84821c8f3970b7b5?tpId=49&&tqId=29297&rp=14&ru=/activity/oj&qru=/ta/2016test/question-ranking
题目描述
输入一个字符串,求出该字符串包含的字符集合
输入描述
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
输出描述
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。
示例1
输入
abcqweracb
输出
abcqwer
题目分析
- 判断输入的字符串长度是否大于100,若大于100,则定义字符串长度为100。
- 定义新数组用来存放字符。
- 判断新数组中是不是第一次出现将要输入的字符串,若是第一次,则保存到新数组中。(indexOf)
- 把字符串数组变成字符串。(join(’’))
- 注意使用while(input = readline())多次输入。
var input;
while(input = readline()){
var arr = [];
if(input.length > 100) {
input.length = 100;
}
for(var i=0;i<input.length;i++){
if(arr.indexOf(input[i])<0){
arr.push(input[i]);
}
}
var res = arr.join('');
console.log(res);
}