[学习笔记-C++篇]day4 plus(刷题篇)

刷题网站:阶段1第一关:基本数据类型


1.三数之中的最大值

class Solution {
public:
    /**
     * @param num1: An integer
     * @param num2: An integer
     * @param num3: An integer
     * @return: an interger
     */
    int maxOfThreeNumbers(int num1, int num2, int num3) {
        // write your code here
        int max;
        max=num1>=num2?num1:num2;
        
        return max>=num3?max:num3;
    }
};

简化一下

class Solution {
public:
    /**
     * @param num1: An integer
     * @param num2: An integer
     * @param num3: An integer
     * @return: an interger
     */
    int maxOfThreeNumbers(int num1, int num2, int num3) {
        // write your code here

        return num1>=num2?(num1>=num3?num1:num3):(num2>=num3?num2:num3);
    }
};

2.大小写转换

考察ASCII码。
直接对char进行比较的话,就是比较ASCII码值的大小。

class Solution {
public:
    /**
     * @param character: a character
     * @return: a character
     */
    char lowercaseToUppercase(char character) {
        // write your code here

        //return character-32;//小写转大写,测试用例只有小转大

        //完整转换
        if(character>=65 && character<=90)
        return character+32;
        else return character-32;
    }
};

不过审题的话就会发现,只需要一句return character-32;即可。

3.判断数字与字母字符

还是ASCII。

class Solution {
public:
    /**
     * @param c: A character.
     * @return: The character is alphanumeric or not.
     */
    bool isAlphanumeric(char c) {
        // write your code here
        if((c>=65 && c<=90) || (c>=97 && c<=122) || (c>=48 && c<=57))
        return true;
        else 
        return false;
    }
};

这里有点问题,默认输入的字符和数字都是个位数。
如果不记得ASCII码的位置,可以直接用字符:
参考解题思路

class Solution {
public:
    /**
     * @param c: A character.
     * @return: The character is alphanumeric or not.
     */
    bool isAlphanumeric(char c) {
        // write your code here
        if((('0' <= c)&&(c <= '9'))||(('a' <= c)&&(c <= 'z'))||(('A' <= c)&&(c <= 'Z'))){
            return true;
        }
        else{
            return false;
        }
    }
};

再简单点,直接库函数,但都只能判断一位数字或字母。

isdigit();//判断是不是数字
isalpha();//判断是不是字母
isalnum();//判断是不是数字或字母

扩展:
islower();//判断是否小写字母
isupper();//判断是否大写字母
//复习整理一下
class Solution {
public:
    /**
     * @param c: A character.
     * @return: The character is alphanumeric or not.
     */
    bool isAlphanumeric(char c) {
        // write your code here
        #if 0
        if((c>=65 && c<=90) || (c>=97 && c<=122) || (c>=48 && c<=57))
        return true;
        else 
        return false;
        #endif

        #if 0
        if( (isdigit(c)) || (isalpha(c)) )
        return true;
        else
        return false;
        #endif

        return isalnum(c);
    }
};

依据扩展思路,重新解第2题,消耗稍微小一点:

class Solution {
public:
    /**
     * @param character: a character
     * @return: a character
     */
    char lowercaseToUppercase(char character) {
        // write your code here

        if(islower(character))
        return character-32;
        else 
        return character+32;
    }
};

4.月份天数

闰年问题,之前讲过。

class Solution {
public:
    /**
     * @param year: a number year
     * @param month: a number month
     * @return: return the number of days of the month.
     */
    int getTheMonthDays(int year, int month) {
        // write your code here

        //主要分平年,闰年,区分2月,其余月份是固定的天数

        //首先判断是否闰年(整除400,或者整除4的非百倍数)
        if(year%400==0 || (year%4==0 && year%100!=0))
        {
            //先解决2月
            if(month==2) return 29;
            else if(month==2 || month==4 || month==6 || month==9 || month==11)
            return 30;
            else return 31;
        }
        else
        {
            if(month==2) return 28;
            else if(month==2 || month==4 || month==6 || month==9 || month==11)
            return 30;
            else return 31;
        }
    }
};

5.闰年

同上

class Solution {
public:
    /**
     * @param n: a number represent year
     * @return: whether year n is a leap year.
     */
    bool isLeapYear(int n) {
        // write your code here
        if(n%400==0 || (n%4==0 && n%100!=0))
        return true;
        else return false;
    }
};

6.生成给定大小的数组

class Solution {
public:
    /**
     * @param size: An integer
     * @return: An integer list
     */
    vector<int> generate(int size) {
        // write your code here
        vector<int> a;
        for(int i=1;i<=size;i++)
        {
            a.push_back(i);
        }
        return a;
    }
};

主要问题还是对vector的不熟悉,没事慢慢来。
首先定义的时候,只需要一个名称即可,和以前的数组完全不一样;
其次,存入一定时push_back,和数组赋值是不一样的;
最后,返回的时候也是,名称即地址
梳理到vector的时候再一并整理。

但是不太清楚击败94%的方法是什么······

6.交换数组两个元素

主要还是考察vector,需要注意,取vector中的值的时候,还是直接使用数组一样的索引即可。

class Solution {
public:
    /**
     * @param A: An integer array
     * @param index1: the first index
     * @param index2: the second index
     * @return: nothing
     */
    void swapIntegers(vector<int> &A, int index1, int index2) {
        // write your code here
        int tmp;
        tmp=A[index1];
        A[index1]=A[index2];
        A[index2]=tmp;
    }
};

7.整数排序

主要考察几种排序方法,全忘了。灵机一动想起来插入排序了。
选择排序参考1.2 选择排序1.1 冒泡排序

简单来说,插入排序是从第2个起和前面的所有比较,找到合适的位置插入;选择排序是从第1个起在后面对比找到最小的依次放在前面;冒泡排序是从第1个起比较相邻两个,升序排列,找到最大的依次放在后面。

swap函数直接用于交换两个量。

class Solution {
public:
    /**
     * @param A: an integer array
     * @return: nothing
     */
    void sortIntegers(vector<int> &A) {
        // write your code here

		#if 0
        //试一下插入
        int tmp;
        for(int i=1;i<A.size();i++)
        {
            for(int j=0;j<i;j++)
            {
                if(A[i]<A[j])
                {
                    tmp=A[i];
                    A[i]=A[j];
                    A[j]=tmp;
                }
            }
        }
        #endif
        
        //选择排序
        int tmp;
        int num;
        for(int i=0;i<A.size()-1;i++)
        {
            num=i;
            tmp=A[i];
            for(int j=i+1;j<A.size();j++)
            {
                if(A[j]<tmp)
                {
                    tmp=A[j];
                    num=j;
                }
            }
            if(num!=i)
            {
                A[num]=A[i];
                A[i]=tmp;
            }
        }
        //也可以用
        #if 0
        for (int i = 0; i < arr.size() - 1; i++) {
                int min = i;
                for (int j = i + 1; j < arr.size(); j++)
                        if (arr[j] < arr[min])
                                min = j;
                std::swap(arr[i], arr[min]);
        }
        #endif
        
        //冒泡
        int all=A.size();
        for(int i=0;i<A.size()-1;i++)
        {
            for(int j=0;j<A.size()-1-i;j++)
            {
                if(A[j]>A[j+1])   swap(A[j],A[j+1]);
            }
        }

    }
};

冒泡的时候注意,最好不要在判断条件出现<A.size()-2这样的表示,若A只有1个元素,就会出现错误。

8.数组的最大值

首先给个暴力解。

class Solution {
public:
    /**
     * @param A: An integer
     * @return: a float number
     */
    float maxOfArray(vector<float> &A) {
        // write your code here
        float tmp=A[0];

        for(int i=1;i<A.size();i++)
        {
            tmp=tmp>A[i]?tmp:A[i];
        }

        return tmp;
    }
};

其实按顺序做,这里是考察7中的排序算法。

class Solution {
public:
    /**
     * @param A: An integer
     * @return: a float number
     */
    float maxOfArray(vector<float> &A) {
        // write your code here
        sort(A.begin(),A.end());//默认升序
        return A[A.size()-1];
    }
};

主要用到自动排序函数sort(),其次取vector元素总数用size()
参考sort()函数详解

sort(首元素地址(必填), 尾元素地址的下一个地址(必填), 比较函数(非必填));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值