牛客网《剑指offer》专栏刷题练习之数组专精_怎么在牛客网上刷数组题

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

  • 由题目可以得知打印的结果取决于n的值且和10的倍数有密切关联:

    • 若n为1,打印的最大值为9
    • 若n为2,打印的最大值为99
      。。。
    • 若n为5,打印的最大值为99999
  • 所以我们可以定义一个值为1的辅助数字,根据n的值来让辅助数字乘以不同数量的10

  • 然后从1到辅助数字进行循环,将结果依次存入一个数组即可

2.2、代码实现
class Solution {
public:
    /\*\*
 \* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 \*
 \* 
 \* @param n int整型 最大位数
 \* @return int整型vector
 \*/
    vector<int> printNumbers(int n) {
        // write code here
        vector<int>res;
        int flag=1;
        for(int i=1;i<=n;i++)
            flag\*=10;
        for(int i=1;i<flag;i++)
            res.push\_back(i);
        return res;
    }
};

2.3、代码解析
  • 创建动态数组res,这是最终用来返回的整数列表
  • flag是辅助数字,利用for循环来确定辅助数字的最终值
  • 从1开始到辅助数字结束,在for循环里将递增的数字存入数组中
  • 最终返回res,算法结束

二、 调整数组顺序使奇数位于偶数前面(一)

1、题目速览

在这里插入图片描述

2、个人题解

2.1、解题思路

注意题目要求:奇数之间与偶数之间的相对位置不变,那么我的解题思路是:

  1. 新创建两个vector容器,对原数组里的元素值判断:
    • 若对2取余为零,证明是偶数,存入偶数容器里
    • 若对2取余不为零,则存入奇数容器里
  2. 由于要求所有奇数在前,那就利用for循环将偶数容器里的元素全部尾插到奇数容器内
  3. 最终的奇数容器就是最终排序的结果
2.2、代码实现
class Solution {
public:
    /\*\*
 \* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 \*
 \* 
 \* @param array int整型vector 
 \* @return int整型vector
 \*/
    vector<int> reOrderArray(vector<int>& array) {
        // write code here
        if(array.size()==0||array.size()==1)
            return array;
        vector<int>os;
        vector<int>js;
        for(int i=0;i<array.size();i++){
            if(array[i]%2==0)
                os.push\_back(array[i]);
            else
                js.push\_back(array[i]);
        }
        for(int i=0;i<os.size();i++){
            js.push\_back(os[i]);
        }
        return js;
    }
};

2.3、代码解析
  • 由于题目中原数组里元素个数可能为0或1,而且这种情况不需要排序,直接返回即可
  • osjs分别代表偶数和奇数容器
  • 对元素组中元素值判断,并插入到不同的容器中
  • 最后将偶数容器内的元素插入到奇数容器内并返回即可

三、 调整数组顺序使奇数位于偶数前面(二)

1、题目速览

在这里插入图片描述

2、个人题解

2.1、解题思路

这一题不要求奇数间或者偶数间的位置了,因此可以采取元素交换的方法:

  • 由于是奇数在前,那就直奔第一个偶数而去
  • 在第一个偶数后找到第一个奇数并进行元素交换
  • 继续向后遍历,重复以上操作即可
    • 注意遍历越界的情况,在代码解析部分会有表示
2.2、代码实现
class Solution {
public:
    /\*\*
 \* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 \*
 \* 
 \* @param array int整型vector 
 \* @return int整型vector
 \*/
    vector<int> reOrderArrayTwo(vector<int>& array) {
        // write code here
        int i=0;
        while(i<array.size()){
            if(array[i]%2==0){


![img](https://img-blog.csdnimg.cn/img_convert/e95ce490e56bb8e48b5d8013c7165eec.png)
![img](https://img-blog.csdnimg.cn/img_convert/a172b9024a67396a7ffda1561760778e.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值