数组奇数左边偶数右边位置不变

剑指offer JS题解 (13)调整数组顺序使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 解题思路 之前我是在leetcode上面做的这道题,leetcode上没有保证奇数和奇数,偶数和偶数之间的相对位置不变这个限制条件,做起来相对自由,可以用头尾双指针(对撞)交换的方式去做。但这道题在牛客上增加了这个条件,难度就上来了。 解法一,我一开始做的思路是把奇数与偶数分开来,然后再合并。相当于遍历第一次划分奇数偶数,遍历第二 阅读详情

数组奇数左边偶数右边位置不变

 

代码如下:自己看吧

public class TestOdd {
    
        public static void  reOrderArray(int [] array) {
            int[] tempArr = new int[array.length];
            int j = 0;
            for(int i=0; i<array.length; i++) {
                if ( (array[i] % 2) != 0) {
                    tempArr[j++]=array[i];
                }
            }
            for(int i=0; i<array.length; i++) {
                if ((array[i]%2)==0) {
                    tempArr[j++]=array[i];
                }
            }
           int k = 0; 
           while(k<array.length) {
               array[k]=tempArr[k];
               k++;
           } 
        }
        public static void main(String[] args) {            
            int[] array = {1,3,5,2,56,62,7,28,9};
            reOrderArray(array);
            for (int i = 0; i < array.length; i++) {
                System.out.print(array[i]+" ");
            }
            
        }
}

结果:

 

聊聊快排吧,这个有点类似快排的感觉

  1、外面的大while条件是left<right

  2、两个指针  一个左边  一个右边

  3、如果两个指针所属的 值都属性是一样 (都是偶数  都是奇数)

  4、来个while 根据实际情况移动下指针  移动到值属性不一样为止

  5、不一样时候 判断如果左边是偶数 右边是奇数的情况下 需要swap

 

但是如果这么玩儿的话肯定是 顺序不满足:看我的代码思路实现:

  

public class Test1 {

    public static void reOrderArray(int[] array) {

        int left = 0;
        int right = array.length - 1;
        while (left < right) {
            while (array[left]%2 !=0 && array[right]%2 !=0){  //都是奇数 移动左边 匹配到可以交换为之
                left++;
            }
            while(array[left]%2 == 0 && array[right]%2 ==0){ //都是偶数  移动右边 匹配到可以交换为之
                 right--;
              }
            if (array[left]%2==0 && array[right]%2 !=0){
                swamp(left,right,array);
            }
           left++;
           right--;
        }

    }

    public static void swamp(int left, int right, int[] arr) {
        int temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
    }

    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        reOrderArray(array);
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }
}

实现结果是这样: 保证左右的奇数偶数属性 但是不能保证顺序

 

所以我采取下面的策略:

  双指针

  第一个去移动,移动到 偶数为止

  第二个去寻找,寻找到奇数 与之交互

    

public class Test2 {
    public static  void sortOdd(int[] arr){
        int left=0;
        int right=1;

       while (right<arr.length && left<arr.length){

          if (arr[left]%2 == 0){  //当前为偶数
              while (right < arr.length-1 && arr[right]%2 ==0 ){ //用right去寻找奇数  注意这里一定要判断下right下表的值 才可以继续往下进行 否则数组没有下标 直接越界啊
                  right++;
              }
              swamp(left,right,arr);
              left++;
              right=left+1;
          }
         //如果当前为奇数  移动当前位置 移动到偶数为之
           while (arr[left]%2 !=0 ){  //奇数就对了 继续往后遍历
              left++;
              right=left+1;
           }
       }
    }
    public static void swamp(int left, int right, int[] arr) {
        int temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
    }

    public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6,7,8,9};
        sortOdd(array);
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }
}

 

二、声明式 Pipeline 语法 选择型参数,一般用于给定几个可选的值,然后选择其中一个进行赋值,例如:parameters { choice(name: ‘CHOICES’, choices: [‘one’, ‘two’, ‘three’], description: ‘’) },表示定义一个名为 CHOICES 的变量,可选的值为 one、two、three;默认情况下,如果定义了某个 stage 的 agent,在进入该 stage 的 agent 后,该 stage 的 when条件才会被评估,但是可以通过一些选项更改此选项。 阅读详情

相关推荐

DTS中video-interfaces接口详解

视频数据管道通常由外部设备组成,例如通过I2C、SPI或UART总线控制的摄像机传感器,以及SoC内部IP块(包括视频DMA引擎和视频数据处理器)。 SoC内部块由DT节点描述,与其他SoC块放置方式类似。外部设备表示为它们各自总线控制器节点的子节点,例如I2C。 所有视频设备上的数据接口都由它们的子“port”节点描述。端口的配置取决于参与数据传输的其他设备,并由“endpoint”子节...

龙图腾的博客 9008

将一维整形数组调整为左右两部分,左边所有元素为奇数,右边为偶数。

include#includeintmain(){intn,temp,temp1=0;scanf("%d",&n);inta[n];inttemp2=n-1;for(inti=0;i

Klay_thompson11的博客 1432

Windows11+VS2022驱动开发环境搭建实战:从零到编译(避坑指南)

本文详细介绍了在Windows11系统下使用VS2022搭建驱动开发环境的完整流程,包括版本匹配、工具安装、环境配置及常见问题解决。重点强调了WDK与系统版本的严格匹配,以及VS2022中驱动开发组件的正确配置方法,帮助开发者高效避坑并成功编译第一个驱动程序。

weixin_29251337的博客 527

混乱无序的整数数组如何实现左侧全是奇数右侧全是偶数(数字不要求排序)

今天同事估计闲得蛋疼,突然开始回忆以前面试过程中被面到过的一些面试问题,有逻辑的,有算法的,然后来考我思路,标题对应的算法就是他碰到的面试算法题之一。 拿到题目的第一个感觉,就是Linq,被Linq带坏了,这种考算法的题目直接来Linq你都逗谁呢,整理一下思路,恩,题目只要求左侧奇数,右侧偶数,并未要求两侧的整数还要分别排序,那算法思路就这么定下来了,按索引从低向高循环,如果遇到偶数,则在循环内

sky 胡萝卜星星 2770

关于深度可分离卷积

关于深度学习中的深度可分离卷积

qq_45670407的博客 1796

VS Code ESP-IDF无法找到源文件、头文件波浪线解决

背景:想要编译小智AI项目,可以正常编译。但是一些头文件,例如#include <nvs.h>等无法找到。

Hot_Ant的博客 1491

将一个数组中所有的奇数放左边,偶数放右边,且原来数字的相对位置不变

public class Test { public static void main(String[] args) { int[] arr={1,3,2,4,5,7,9,8}; int count=0; //定义获取的方法 //定义计数器,计算数组中奇数的个数 for(int i=0;i if(arr[i]%2!=0) count++; } //定义新数组存储原数

zw_wen的博客 3719

10万+字超硬核 机器学习 笔记(面试八股)

10w字总结面试中可能用到的机器学习八股和常用算法,包括感知机(Perceptron)、多层感知机(MLP, Multi-Layer Perceptron)、支持向量机(SVM, Support Vector Machine)、K 最近邻(KNN, K-Nearest Neighbors)、朴素贝叶斯(Naive Bayes)、决策树(Decision Tree)、随机森林(Random Forest)、Bagging、Boosting、GBDT、XGBoos、LightGBM等。

haopinglianlian的博客 4658

将数组中的元素按照奇数在偶数的左边排列(奇左偶右)

今天完成一道比较考验逻辑能力的经典案例——数组内元素奇左偶右的排布。 案例的要求如下: 1.键盘录入10个整数存入数组中 2.定义一个方法将奇数放在数组的左侧,偶数放在数组的右侧 3.定义一个方法打印原数组和处理后的数组 下面提出两种代码解决方式: 第一种:利用for循环,代码如下(含代码思路步骤及注释) /* * @作者:猫土豆 * @功能:定义一个方法将数组内奇数放在数组的左侧,偶数放在数组的右侧 */ import java.util.S...

MAOMAOMAOMAOMAOM的博客 2247

基于STM32的智能鞋柜系统设计与实现

摘要:本文设计并实现了一种基于STM32F103C8T6单片机的智能鞋柜系统。该系统通过DHT11温湿度传感器、PM2.5粉尘传感器和MQ-135空气质量传感器构建多维度环境监测网络,结合光电红外传感器和光敏传感器实现柜门状态识别与智能照明。系统采用分层控制策略,当温度低于15℃或湿度高于65%时自动启动加热和通风,PM2.5超标时启动通风,污染物浓度升高时激活紫外线杀菌。创新性地实现了柜门状态与紫外线消毒的双保险互锁机制,确保使用安全。测试结果表明,系统温湿度控制精度达±0.4℃/±2.0%RH,PM2.

3254968421的博客 253

YOLO11涨点优化:损失函数优化 | 引入MPDIoU,利用边界框左上角和右下角距离,彻底解决重叠框匹配失效问题

【摘要】针对目标检测中重叠框匹配失效问题,本文提出基于MPDIoU损失函数的解决方案。MPDIoU通过同时约束边界框的左上角和右下角两点距离,有效解决了传统IoU损失在重叠场景下的优化歧义问题。文章首先分析YOLO系列在密集目标检测中的性能瓶颈,指出GIoU/CIoU等现有方法无法区分相同IoU值但偏移方向不同的预测框。随后详细解析MPDIoU的数学原理及其相对于主流损失函数的优势,证明两点距离约束能提供唯一优化方向。最后给出在YOLO11中实现MPDIoU的具体方案,包括核心代码修改点和架构适配建议。实验

2601_95807009的博客 172

数组排序,使得所有奇数都在左边,所有偶数都在右边

题目描述 在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。 请完成sort的代码实现 void sort(int[]a) { } 例如:当输入a={8,4,1,6,7,4,9,6,4}, a={1,7,9,8,4,6,4,6,4}为一种满足条件的排序结果。 参考思路1: (1)快慢指针同时从一侧出发,找到第一个偶数时,慢指针(...

qq_28632639的博客 2094

详细介绍用MATLAB实现基于A*算法的路径规划(附完整的代码,代码逐行进行解释)(一)--------A*算法简介和环境的创建

   本系列文章主要介绍基于A*算法的路径规划的实现,并使用MATLAB进行仿真演示。    一、 A*算法简介       A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。      公式表示为: f(n)=g(n)+h(n),其中, f(n) 是从初始状态经由状态n到目标状态的代价估计,g(n) 是在状态空间中从初始状态到状态n的实际代价,h(n) 是从状态n到目标状态的最佳路径的估计代价。

慕羽★的博客 7万+

给一个数组,把偶数放到左边,奇数放到右边(有序和无序)

思路:设置两个指针,一个less一个more,如果当前less位置的元素为偶数,那么和more位置的元素交换位置,more--,接着继续判断交换过来的元素是否是偶数,如果继续是偶数,那么继续和more位置的元素交换,一直循环到less>=more,复杂度为O(N)代码如下 public static void reOrderArray(int[] arr) { i...

Hollake的博客 5892

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

算法—输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分, 并保证奇数和奇数,偶数和偶数之间的相对位置不变

1.明确了题目需求,使得奇数位于左边,偶数位于右边; 当左边的元素位奇数,继续; 当右边元素为偶数,继续; 当这两个条件同时都不满足,也就是左边为偶数,右边为奇数,那么就调换两个元素位置。 考虑使用位运算,奇数&1必然=1,偶数&1必然等于0,以此区分是奇数还是偶数。 代码实现: public static void reOrderArray(int [] array) { int...

hukehukehukehuke的博客 591

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

百度笔试1

算法--两道百度笔试题          百度面试题(一):假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数和正数间元素相对位置不变。时空复杂度要求分别为:o(n)和o(1)。          百度面试题(二),给定一个存放正数的数组,重新排列数组使得数组左边为奇数,右边为偶数,且保证奇数和偶数之间元素相对位置不变。时空复杂度要求分别为:o(n)

清闲居 863

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

牛客 刷题 调整数组的顺序 使奇数在前 偶数在后 并且相对位置不变

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 解题思路: 1 第一种想简单了 没有保证相对位置不变, 用两个指针 一前一后,前面的指针遇到偶数 停下来 后面的指针遇到奇数停下来 然后两个 交换 ,直至前指针的位置比后指针的位置还要后。 2 第...

m0_37896011的博客 1599

剑指Offer(13)______调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 class Solution { public: void reOrderArray(vector &array) { if(array.size() == 0) return;

YzlCoder的记事本 404

java实现一个数组中奇数在左,偶数在右,且元素的相对位置不变

java实现一个数组中奇数在左,偶数在右,且元素的相对位置不变。

mameng1988的博客 568

定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边。

/** * 定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边。(可以创建其他数组,不必须在原数组中改变) * 1. 要找奇数和偶数只需要判断对2取余即可。 * 2. 找到一个奇数或偶数之后,把它放在哪个索引处? */ public class TestDemo06 { public static void main(String[] args) { //1.定义一个数组

LBJ_小松鼠的博客 2470

已知数组A[n]的元素为整型,设计算法将其调整为两部分,左边所有元素为奇数,右边所有元素为偶数。

已知数组A[n]的元素为整型,设计算法将其调整为两部分,左边所有元素为奇数,右边所有元素为偶数。 解题思路: 首先设置两个下标,first 和 last,分别指向顺序表第一个和最后一个。然后做出判断: 判断一:A[first]为奇数且A[last]为偶数,则 first 向后移一位,last 向前移一位。 if (a[first] % 2 == 1 && a[last] % 2 == 0) { first++; last--; continue; } 判断二

qq_45974622的博客 6781

一个数组,把奇数放到左边,偶数放到右边,调整后有序方法和无序方法

题目 如标题(写完发现奇偶写反了……就改一下题目吧hhh) 代码 1、无序 为了方便弄个printfArray输出 void printfArray(int a[]) { int i; for (i = 0; i < 10; i++) { printf("%d ", a[i]); } putchar('\n'); } void diso...

LShang2384的博客 1547

【剑指offer】调整数组顺序使奇数位于左边偶数位于右边

题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 分析 如果只是简单地讲奇数偶数分开的话,可直接使用快排的思想,一次遍历便可得到答案。但是此题教复杂,要求相对位置不变。 1 使用辅助空间 如果没有空间要求, 那么完全可以直接使用辅助空间分别存储奇数和偶数, 然后讲奇数放前面...

bushoushijin__的博客 521

调整数组顺序使奇数位于偶数前面,且奇数之间、偶数之间的相对位置不变

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 题目地址:https://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593?tpId=13&tqId=111...

aodubi0638的博客 294

重排数组使得数组左边为奇数,右边为偶数

题目:给定一个存放整数的数组,如何重新排列数组使得数组左边为奇数,右边为偶数?要求:空间复杂度为O(1),时间复杂度为O(n)。 分析:采用类似快速排序的处理。可以用两个指针分别指向数组的头和尾,头指针正向遍历数组,找到第一个偶数,尾指针逆序遍历数组,找到第一个奇数,交换两个指针指向的数字,然后两指针沿着相应的方向继续向前移动,重复上述步骤,直到头指针大于等于尾指针为止。具体实现如下:#inclu

小僧Coding 4742

数组中的奇数放左端,偶数放右端

package com.arr; import java.util.Arrays; //将数组的奇数放在数组左边,偶数放在右边 public class JiOuSort { public static void main(String[] args) { int[] arr = {3, 1, 4, 2, 5, 6}; // getSortedJiOuArr_01(arr); // getSortedJiOuArr_02(arr); S

Winmusic的博客 1055
上一篇: 线程的sleep()方法和yield()方法区别
下一篇: 正数、负数和零的挪动问题
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值