第一题
千问万问
题目描述
给定大小为n的整数序列A. 现在会有q次询问,询问子区间的不同整数的数量。
输入描述:
第一行输入整数n,q.(1<=n,q<=1000) 第二行输入n个整数.(1<=a<=100000) 以下q行每行两个整数l,r。(1<=l,r<=100000)
输出描述:
输出区间内的整数数量。
输入样例
10 3
1 2 3 4 5 6 7 8 9 10
1 1
1 2
1 3
输出样例
1
2
3
题解
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int a[N], s[N];
int main() {
int n, m, x;
cin>>n>>m;
memset(a, 0, sizeof a);
memset(s, 0, sizeof s);
for (int i = 0; i < n; i++) {
cin>>x;
a[x]++;
}
for (int i = 1; i <= N - 1; i++) s[i] = s[i - 1] + a[i];
while(m--) {
int l, r;
cin>>l>>r;
cout<<s[r] - s[l-1]<<endl;
}
return 0;
}
第二题
字符串全排列
题目描述
对K个不同字符的全排列组成的数组, 面试官从中随机拿走了一个, 剩下的数组作为输入, 请帮忙找出这个被拿走的字符串? 比如[“ABC”, “ACB”, “BAC”, “CAB”, “CBA”] 返回 “BCA”
输入描述:
第一行输入整数n,表示给定n个字符串。(n == x!-1,2<=x<=10) 以下n行每行输入一个字符串。
输出描述:
输出全排列缺少的字符串。
输入样例
5
ABC
ACB
BAC
CAB
CBA
输出样例
BCA
题解
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
char str[100]={0};
char s[100]={0};
cin>>n;
cin>>str;
int len = strlen(str);
if(n==1)
{
for(int i = 0; i < len; i++)
{
s[i] = str[len-i-1];
}
cout<<s<<endl;
return 0;
}
for(int i = 1; i < n; i++)
{
cin>>s;
for(int j = 0; j < len; j++)
{
str[j] = str[j] ^ s[j];
}
}
cout<<str<<endl;
return 0;
}
第三题
删除排序链表中的重复元素 II
题目描述
存在一个按升序排列的链表,给你这个链表的头节点 head
,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
返回同样按升序排列的结果链表。
输入样例
head = [1,2,3,3,4,4,5]
输出样例
[1,2,5]
题解
#include <stdio.h>
#include <stdlib.h>
struct ListNode
{
int val;
struct ListNode *next;
};
struct ListNode *deleteDuplicates(struct ListNode *head)
{
struct ListNode dummy;
struct ListNode *p, *q, *prev;
prev = &dummy;
dummy.next = head;
p = q = head;
while (p != NULL)
{
while (q != NULL && q->val == p->val)
{
q = q->next;
}
if (p->next == q)
{
prev = p;
}
else
{
prev->next = q;
}
p = q;
}
return dummy.next;
}
int main(int argc, char **argv)
{
int i;
struct ListNode *head = NULL;
struct ListNode *prev = NULL;
struct ListNode *p;
for (i = 0; i < argc - 1; i++)
{
p = malloc(sizeof(*p));
p->val = atoi(argv[i + 1]);
p->next = NULL;
if (head == NULL)
{
head = p;
prev = head;
}
else
{
prev->next = p;
prev = p;
}
}
p = deleteDuplicates(head);
while (p != NULL)
{
printf("%d ", p->val);
p = p->next;
}
printf("\n");
return 0;
}
希望对大家的每日一练有帮助。