每日一题:11.1

今天开始弄一个新的板块,也是我在CSDN上的第一个板块,每日一题。

我之前一直都有做每日一题的想法,但是坚持几天就坚持不下去了,我也不知道这次我能坚持多久。

这个版块的文章里,除了题目,我的思路,大佬的思路这三个主要的部分之外,我还会穿插着写一些自己的心境,就当是一个树洞吧,记载着一个编程小白的心路历程。

闲话少叙,我们还是先看题。

11.1每日一题:字符频次唯一的最小删除次数

这个题,由于是中档题,我第一次看到还是蛮害怕的,我怕我不会做。但是细细看了看之后,渐渐的有了一些思路。

大概的思路如图

啊,写到这里的时候洗脚水洒了,收拾了十几分钟宿舍,现在写博客思路有点断了。。。 

先上我第一遍写的代码

class Solution {
public:
    int minDeletions(string s) {
        int len=s.length();
        int ghost[len];
        for(int i=0;i<len;i++){
            ghost[i]=1;
        }
        char ch;
        int time=0;
        for(int i=0;i<len;i++)
        {
            if(ghost[i]==0)
                continue;
            ch=s[i];
            for(int j=i+1;j<len;j++)
            {
                if(ch==s[j])
                {
                    ghost[i]++;
                    ghost[j]=0;
                }
            }
        }
        for(int a=0;a<len;a++){
            for(int b=a;b<len;b++){
                if(ghost[a]==ghost[b]&&ghost[b]!=0){
                    time++;
                }
            }
        }
        return time;
    }
};

为什么数组起名叫ghost,因为最近刚刚二刷COD10。。。目前还处在中二的阶段。

由于我的水平有限,暂时还没看出来哪里有问题,如果有大佬们看出来了的话,麻烦帮我指正一下,谢谢大家!

这段代码显然是没有AC的,最后的结果是103个点只过了一个点,但还好,和之前比有进步,之前有时候编译都过不了hhhh

然后看了一位大佬的题解,醍醐灌顶。我的思路还是有点麻烦,而且使用了变量作为数组的大小,这样容易逻辑上出问题(考虑的时候没注意越界这种),那么为什么我不用26个字母作为数组呢,这样不涉及变量,思考起来方便一点。

By the way, 那位大佬的Leetcode名字叫ffreturn。

除了以字母的数量作为数组长度之外这一核心思想外,题解中还用了memset函数,这里就不解释了,记住他可以用于数组初始化就好了。其实这个函数我应该是见过,但是总忘记他是干什么的,然后学校写作业的时候也不让用STL的库函数,大部分都要自己重新实现,所以有的可能在工作上很常用的函数,到我这还是很陌生,以后还是要多学多积累。

还有就是这个语法:

for (char c : s)

查了一下,发现这是C++11中新增的一种循环写法,对数组(或容器类,如vector和array)的每个元素执行相同的操作,此外string类也支持这种对字符的遍历循环操作。
如: double prices[5] = {4.99,5.99,6.99,7.99,8.99};
for(double x:prices)
cout << x << endl;
其中,x最初表示数组prices的第一个元素,显示第一个元素后,不断执行循环,而x依次表示数组的其他元素。

以上是为CSDN博主「shifouxinyu」的原创文章的一部分,原文链接:https://blog.csdn.net/shifouxinyu/article/details/70188944

还有这样的语法:

 sort(cnt, cnt+26, greater<int>());

sort排序算法不多说了,主要说说greater<int>(), 这个是降序排序的意思。要使用这个的话,需要先导入头文件<functional>。

后面就很好理解了,由大到小排完,看有没有出现次数相同的字母,有的话就处理一下,处理成优秀字符串,然后返回处理了几次,大概就是这样。

第一次写博客,肯定有很多不足的地方,我现在编程水平也比较低,文中难免有写得不好的地方,欢迎大家指正,讨论。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值