基础编程题之奇数位(偶数位)都是奇数(偶数)

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础编程题之奇数位(偶数位)都是奇数(偶数)相关的知识,希望对你有一定的参考价值。

题目

牛客
在这里插入图片描述

解题思路

题目的意思是给定一个数组arr,让你调整它,最终这个数组必须满足奇数位上的数字必须是奇数,偶数位上的数字必须是偶数,其中1,3,5,7…算作奇数位,0,2,4,6,8…算作偶数位

这道题不难,但是大家在解决时可能会想得过于麻烦。我们可以让变量i永远指向偶数位,变量j永远指向奇数位,如果偶数位上是偶数,奇数位上是奇数那么就略过,反之直接交换两个出现矛盾的位置的数字即可

代码

class Solution {
public:
    void oddInOddEvenInEven(vector<int>& arr, int len) 
    {
        int i=0;
        int j=1;//i和j分别指向偶数位和奇数位
        while(i<len && j<len)
        {
            if(arr[i]%2==0)//如果偶数位上是偶数,略过
            {
                i+=2;
                continue;
            }
            if(arr[j]%2!=0)//如果奇数位上是奇数,略过
            {
                j+=2;
                continue;
            }
            swap(arr[i],arr[j]);//出现矛盾,就代表奇数位上偶数,偶数位上奇数,那么只需交换即可
        }
    }
};

注意

这道题在牛客网上容易出现误判,往往会因为结果没问题但是就是与题目给出的预期答案的顺序无关从而误判
在这里插入图片描述

以上是关于基础编程题之奇数位(偶数位)都是奇数(偶数)的主要内容,如果未能解决你的问题,请参考以下文章

宏实现奇数偶数位交换及offsetof

java编写将一串字符串中的奇数位提出来相加并且偶数位每个数相加

找出区间[A, B]内所有数字的奇数字位出现次数为偶数,偶数字位出现次数为计数的数的个数。(数位DP)

c语言用while循环使一个字符串的奇数位字母不变,偶数位字母大小写转换。

从0~7这八个数组成无重复的七位数,要求奇数占奇数位,有多少种排列

检查数字 lisp 中偶数位置的偶数位