字符串最后一个单词的长度
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)
题目链接—https://www.nowcoder.com/practice/8c949ea5f36f422594b306a2300315da?tpId=37&&tqId=21224
解题思路:从数组的最后一个字符开始统计遇到空格停止即可,但是有一个要注意的点,就是输入字符串的时候 scanf遇到空格就停止了。 所以这里我们要读取一行-------scanf("%[^\n]",arr); 看代码
#include<stdio.h>
#include<string.h>
int main()
{
char arr[5000]={0};
scanf("%[^\n]",arr);
char* ret=arr+strlen(arr)-1;
int count=0;
while(*ret!=' ' && ret >= arr)
{
count++;
ret--;
}
printf("%d\n",count);
return 0;
}
字符个数统计
编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次 例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。
题目链接------https://www.nowcoder.com/practice/eb94f6a5b2ba49c6ac72d40b5ce95f50?tpId=37&&tqId=21233&rp=1&ru=/ta/huawei&qru=/ta/huawei/question-ranking
解题思路: 1先使用快排,这样相同的元素就集中在一起了 2然后开始遍历这个数组,两个元素不同就+1,这样加完以后,再加1就是数组元素的种类了
看代码
#include<stdio.h>
#include<string.h>
int cmp_char(const void* e1,const void* e2)
{
return *(char*)e1-*(char*)e2;
}
int main()
{
char arr[500]={0};
scanf("%s",arr);
int len=strlen(arr);
qsort(arr,len,1,cmp_char);
int i=0,count=0;
for(i=0;i<len-1;i++)
{
if(arr[i]!=arr[i+1])
count++;
}
printf("%d\n",count+1);
return 0;
}
多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ? n/2 ? 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/majority-element
解题思路: 1.先用qsort快速排序一下数组,相同的元素就在一块了 2.然后用i,j两个下标为0开始统计,相同则j++,并开始统计 3不等然后j赋值给i,再重新统计 4比较重要的一点,题目说了一定存在,所以我们尽量在统计的时候+1就与n/2比较一下, 如果统计完了再比较,会出现一些不可预料的错误。
先看正确可通过的代码
int cmp_int(const void* e1,const void* e2)
{
return *(int*)e1-*(int*)e2;
}
int majorityElement(int* nums, int numsSize)
{
qsort(nums,numsSize,sizeof(int),cmp_int);
int i=0,j=0,count=0;
while(i<numsSize && j<numsSize)
{
int count =0;
while(nums[i]==nums[j] )
{
count++;
if(count>numsSize/2)
goto test;
j++;
}
i=j;
}
test:
return nums[i];
}
如果你统计完再比较,就会出现错误 例如这个不通过的代码
int cmp_int(const void* e1,const void* e2)
{
return *(int*)e1-*(int*)e2;
}
int majorityElement(int* nums, int numsSize)
{
qsort(nums,numsSize,sizeof(int),cmp_int);
int i=0,j=0,count=0;
while(i<numsSize && j<numsSize)
{
int count =0;
while(nums[i]==nums[j]&&j<numsSize)
{
count++;
j++;
}
if(count>numsSize/2)
goto test;
i=j;
}
test:
return nums[i];
}
|