20200907 丁浪_打卡第二天
一天小结
今日任务未完成,花了大于四小时去完成该任务,但未完成。看了五个题目,只做出两个题目,嗯,做高频数组是采用的是暴力求解,做第一次时废了很大力气做出了一个不符合题目的代码,后来重做时变写边测试,倒是有新的体会。做实现strStr时,虽然做出来了,但是时间花费过多。
实现正则模拟时,最开始仍然是开错题目了(一个细节处看错了),实现出来了,然后思路乱了,于是就暂时搁浅了。做字符串相乘和最大正方形时,有一点点思路,但是不够清晰,而且不能很快地落实为代码,还是很伤心的,突然觉得自己老菜了.....
然后发现自己在解题的时候解题的手法太过于单一!后边准备修改一下,每天做五个题换为每天看懂五道题,然后再实现出来,太难了!
今天散了一个多小时的步,听着史诗级bgm#手动滑稽#,然后路过一处昏暗处突然感觉看到的东西变了个样子......变成了一种既陌生又熟悉的感觉,好像一切都很崭新,一起都陌生,我感觉这有一点点像小孩子看世界的态度,嗯,怎么说了,我时常会迷恋一个动作:将垂落的双手微微抬起,低头看着这双手,这和第一人称fps游戏开场场景好像!我突然思考,我每天走路,我真的会走路吗,实际上是否会走路这并不能决定我是否能愉快的生活下去,决定这的是我是否享受走路的过程。今日也是多愁善感的一天#手动逗比#
以下是两个代码
#include<stdio.h>
#include<stdlib.h>
int* topKFrequent(int* nums, int numsSize, int k, int* returnSize){
int *arr=(int *)malloc(sizeof(int)*numsSize);
int *nums_count=(int *)malloc(sizeof(int)*numsSize); //记录每位的数量
int *nums_only=(int *)malloc(sizeof(int)*numsSize); //新的一位所在的索引
int i,j;
int nums_only_count;
int flg;
int tmp;
int retSize;
flg=0;
nums_only_count=0;
//扫描并填装nums_only和nums_count
for(i=0;i<numsSize;i++){
flg=0;
//nums[i]
//扫描nums_only,如果nums[i]在其中,则修改nums_count;否则添加进nums_only并添加nums_count
for(j=0;j<nums_only_count;j++){
if(nums[i]==nums_only[j]){
flg=1; //扫描中出现设置为非0值,此时不需要向nums_only新添加
nums_count[j]++;
}
}
if(!flg){
nums_only[nums_only_count]=nums[i];
nums_count[nums_only_count]=1;
nums_only_count++;
}
}
/*
//debug :: 输出观察
for(i=0;i<nums_only_count;i++){
printf("%2d , %2d\n",nums_only[i],nums_count[i]);
}
//debug :: 通过
*/
//对nums_count降序排列(牵动这nums_only),方法冒泡
for(i=nums_only_count-1;i>0;i--){
for(j=0;j<i;j++){ //填充第i位 ::j+1位忠实合法的!
if(nums_count[j]<nums_count[j+1]){
//交换nums_count
nums_count[j]+=nums_count[j+1];
nums_count[j+1]=nums_count[j]-nums_count[j+1];
nums_count[j]=nums_count[j]-nums_count[j+1];
//交换nums_only
nums_only[j]+=nums_only[j+1];
nums_only[j+1]=nums_only[j]-nums_only[j+1];
nums_only[j]=nums_only[j]-nums_only[j+1];
}
}
}
/*
//debug :: 输出观察
for(i=0;i<nums_only_count;i++){
printf("%2d , %2d\n",nums_only[i],nums_count[i]);
}
//debug :: 通过
*/
//按主键nums_count取出nums_only放入arr中
tmp=nums_count[0]; //初始化tmp值
retSize=0;
arr[retSize++]=nums_only[0];
i=1; //初始化为1,第一个值被手动的填装
for(j=1;j<nums_only_count;j++){
if(tmp!=nums_count[j]){
// 嵌入测试
//printf("###%2d, %2d\n",tmp,nums_count[j]);
// 嵌入测试结束
tmp=nums_count[j];
}
i++; //当nums_count为 3 2 2 1; k为2是,实际填装的为 3 2 2
if(i>k){ //边界简单测试通过
break;
}
arr[retSize++]=nums_only[j]; //暴力填装
}
free(nums_count);
free(nums_only);
/*
//debug :: 输出观察
puts("-------------------");
for(i=0;i<retSize;i++){
printf("%2d\n",arr[i]);
}
//debug :: 通过
*/
*returnSize= retSize; //1retSize为1
//debug:输出观察
// printf("%d",*returnSize);
//debug:输出观察
return arr;
}
int main(){
int arr[]={3,0,1,0}; //1 2 3 4 5 6 8
int size;
//int *p=topKFrequent(arr,sizeof(arr)/sizeof(int),2,&size);
int *p=topKFrequent(arr,sizeof(arr)/sizeof(int),1,&size);
//int *p=topKFrequent(arr,sizeof(arr)/sizeof(int),1,&size);
return 0;
}
#include<stdio.h>
int fun01(char *str,char *strIn){
char *pStr=str;
int i,j;
int len;
int flg=0;
//获取字符串长度
i=0;
len=0;
while(*(strIn+i)!='\0'){
len++;
i++;
}
i=0; //表示pStr起点位置
while(*(pStr+i)!='\0'){
if(*(pStr+i)==*strIn){ //找到第一个相同的字符
j=0;
while(*(strIn+j)!='\0' && *(pStr+i+j)!='\0'){
if(*(strIn+j)!=*(pStr+i+j)){
break;
}
j++;
}
if(j==len){
flg=1;
break;
}
}else{
i++;
}
}
if(flg){
return i;
} else{
return -1;
}
}
int main(){
/**
测试用例
abbbb--ab : 0
abcd--cd : 2
acccdd--dd:
*/
char str[128];
char strIn[128];
//str strIn不包括空格
scanf("%s",str);
scanf("%s",strIn);
printf("%d",fun01(str,strIn));
return 0;
}
近期评论