0
点赞
收藏
分享

微信扫一扫

redis 数据结构(二)

目录

选择题:

题一:

题二:

题三:

题四:

题五:

编程题:

题一:寻找奇数

思路一:

题二:寻找峰值

思路一:

本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!

感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!


选择题:

题一:

题二:

题三:

题四:

题五:

编程题:

题一:寻找奇数

寻找奇数_牛客题霸_牛客网 (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;
}

本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!

感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!

                                              

举报

相关推荐

0 条评论