查询无效交易
如果出现下述两种情况,交易 可能无效:
交易金额超过 $1000
或者,它和 另一个城市 中 同名 的另一笔交易相隔不超过 60 分钟(包含 60 分钟整)
给定字符串数组交易清单 transaction 。每个交易字符串 transactions[i] 由一些用逗号分隔的值组成,这些值分别表示交易的名称,时间(以分钟计),金额以及城市。
返回 transactions,返回可能无效的交易列表。你可以按 任何顺序 返回答案。 示例 1:
输入:transactions = [“alice,20,800,mtv”,“alice,50,100,beijing”] 输出:[“alice,20,800,mtv”,“alice,50,100,beijing”] 解释:第一笔交易是无效的,因为第二笔交易和它间隔不超过 60 分钟、名称相同且发生在不同的城市。同样,第二笔交易也是无效的。
示例 2:
输入:transactions = [“alice,20,800,mtv”,“alice,50,1200,mtv”] 输出:[“alice,50,1200,mtv”]
示例 3:
输入:transactions = [“alice,20,800,mtv”,“bob,50,1200,mtv”] 输出:[“bob,50,1200,mtv”] 解题代码如下:
int f1(char *ch){
int i=0;
int s=0;
while(ch[i++]!=','){
}
while(ch[i++]!=','){
}
while(ch[i]!=','){
s=s*10+ch[i]-'0';
i++;
}
printf("%d ",s);
if(s>1000){
return 0;
}
else return 1;
}
int f2(char *ch1,char *ch2){
char s1_name[20],s1_city[20],s2_name[20],s2_city[20];
int s1m=0,s2m=0;
int i=0,j=0;
int p1,p2;
while(ch1[i]!=','){
s1_name[i]=ch1[i];
i++;
}
while(ch2[j]!=','){
s2_name[j]=ch2[j];
j++;
}
s1_name[i]='\0';
s2_name[j]='\0';
i++;
j++;
if(strcmp(s1_name,s2_name)==0){
while(ch1[i]!=','){
s1m=s1m*10+ch1[i]-'0';
i++;
}
while(ch2[j]!=','){
s2m=s2m*10+ch2[j]-'0';
j++;
}
i++;
j++;
while(ch1[i++]!=','){
}
while(ch2[j++]!=','){
}
p1=0;
p2=0;
while(ch1[i]!='\0'){
s1_city[p1]=ch1[i];
i++;
p1++;
}
while(ch2[j]!='\0'){
s2_city[p2]=ch2[j];
j++;
p2++;
}
s1_city[p1]='\0';
s2_city[p2]='\0';
if(strcmp(s1_city,s2_city)!=0){
if(abs(s2m-s1m)<=60){
return 0;
}
else return 1;
}
else return 1;
}
else return 1;
}
char ** invalidTransactions(char ** transactions, int transactionsSize, int* returnSize){
int a[transactionsSize],i,j;
int p=0;
for(i=0;i<transactionsSize;i++){
if(f1(transactions[i])){
a[i]=1;
}
else a[i]=0;
}
for(i=0;i<transactionsSize;i++){
j=i+1;
if(j<transactionsSize){
for(j;j<transactionsSize;j++){
if(f2(transactions[i],transactions[j])==0){
a[i]=0;
a[j]=0;
}
}
}
}
for(i=0;i<transactionsSize;i++){
if(a[i]==0){
transactions[p++]=transactions[i];
}
}
*returnSize=p;
return transactions;
}
|