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;
} 

评论