字符串中找出连续最长的数字串 &&n个数里出现次数大于等于n/2的数

1、概念笔记

①指针数组与指针数组

对于 A)int *p1[10]B)int (*p2)[10]
“ [ ] ”的优先级比“ * ” 要高。p1 先与“[ ]”结合,构成一个数组的定义,数组名为p1,int* 修饰的是数组的内容,即数组的每个元素。那现在我们清楚,这是一个数组,其包含10 个指向int 类型数据的指针,即指针数组
“()”的优先级比“[]”高,“*”号和p2构成一个指针的定义,指针变量名为p2,int修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组,p2是一个指针,它指向一个包含10个int类型数据的数组即数组指针

②二维数组的初始化省略

二维数组的第一维可以看作是一个数组指针即(*arr)[ ],利用数组指针进行访问,因此二维数组的初始化可以省略第一维,但不可省略第二维
如:int ta[][3]={{0,1,2},{3,4,5}};

2、OJ编程

1、字符串中找出连续最长的数字串

读入一个字符串str,输出字符串str中的连续最长的数字串
解:这道题比较简单,遍历字符串,只要判定是数字字符,进入循环++ count,直到遍历到不是数字字符,然后保存这个值,继续遍历,如果后面有比这个值大的就覆盖这个值,知道遍历完这个字符串。
例如:abcd12345ed125ss123456789。

cur_str:当前数字字符串
ret_str:保存的数字字符长度
if(该字符c属于数字字符)
{
	while(该字符c属于数字字符 && 字符串未遍历完)
	{
		cur_str += c;
	}
	if(cur_str.size() > ret_str.size())
		cur_str= cur_str;
	cur_str.clear();
}

2、n个数里出现次数大于等于n/2的数

输入n个整数,输出出现次数大于等于数组长度一半的数。

解:简单的解法就是把数组排序,然后输出最中间的那个数。因为它出现的次数大于数组长度的一半,那么排序之后,肯定有一个数在中间。当然也可以用map来做,用一个map来记录出现的次数,然后遍历这个map就行。

    int n;
    int size = 0;
    map<int,int> m;
    
    while(cin >> n)
    {
        ++m[n];
        ++size;
    }
    for(const auto& m : m)
        if(m.second >= size/2)
        {
            cout << m.first << endl;
            break;
        }

3、源代码地址

上述两道题的参考代码链接,点击题目就可进入。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值