目录
本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!
感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!
选择题:
题一:
题二:
题三:
题四:
题五:
编程题:
题一:寻找奇数
寻找奇数_牛客题霸_牛客网 (nowcoder.com)
思路一:
第一步:定义记录元素值的result,以及元素个数n;
第二步:遍历题目所给数组,并输入各个下标对应的元素给result,按位异或,最终将相同的数抵消为“0”;
第三步:最后得到的就是数组中奇数个元素,打印。
#include <stdio.h>
#include <string.h>
int main()
{
int n = 0;
int result = 0;
scanf("%d", &n);
int num = 0;
//遍历题目数组
for (int i = 0; i < n; i++)
{
//输入各个下标对应的元素
scanf("%d", &result);
//按位异或,最终将相同的数抵消为“0”
num ^= result;
}
//最后得到的就是数组中奇数个元素
printf("%d\n", num);
return 0;
}
题二:寻找峰值
寻找峰值_牛客题霸_牛客网 (nowcoder.com)
思路一:
二分查找:
第一步:首先排除边界情况,再定义首元素下标left,尾元素下标right;
第二步:二分查找:nums[mid] < nums[mid+1]时,说明峰在右边,即需要left = mid + 1;
nums[mid] >= nums[mid+1]时,说明峰在左边,即需要 right = mid;
第三步:最后二分查找使下标left就是最大值,返回left。
int findPeakElement(int* nums, int numsLen )
{
//排除边界情况
if(numsLen == 1 || nums[0] > nums[1])
return 0;
if(nums[numsLen-1] > nums[numsLen-2])
return numsLen-1;
int left = 0;
int right = numsLen-1;
//二分查找使下标left就是最大值
while(left < right)
{
int mid = (left + right) / 2;
if(nums[mid] < nums[mid+1])
{
left = mid + 1;
}
else
{
right = mid;
}
}
return left;
}
本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!
感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!