正数、负数和零的挪动问题

给定一个整数数组,数组中有正负数随机分布,要求将正数负数间隔分布,且不改变其原来的顺序。 给定一个整数数组,数组中有正负数随机分布,要求将正数负数间隔分布,且不改变其原来的顺序。 例如【1, 2, 3, -2, -4, -6, 7, 8】 => 【1,-2, 2, -4, 3, -6, 7, 8】 思路1:开辟一个O(n)的空间,定义两个下标,一个指向正数,一个指向负数,分别按照正负的顺序push_back到新数组里面即可; 思路2:不开辟0(n)的空间,先对原数组进行一个操作,将正数排在负数的后面,然后依次挪动负数即可;思路二代码如下: //给一个有正负数的数组,让正数排在负数 阅读详情

正数、负数和零的挪动问题

把0挪放到最后

public class Test3 {
    public static void appendZero(int[] arr) {
        int left = 0;
        int right = arr.length-1;

        while (left <= right) {
            //从右边走起看右边 如果不是0 那么去右边找个0 来换,如果是0  就往左边移动
            while (right>=0 && arr[right] ==0){
                right--;
            }
            if (arr[right]!=0){
                while (left < right && arr[left] !=0){
                    left++;
                }
                swap(left, right, arr);
            }
            right--;
        }
    }
    public static void swap(int left, int right, int[] arr) {
        int temp = arr[left];
        arr[left]=arr[right];
        arr[right]=temp;
    }
    public static void main(String[] args) {

        int[] arr = {1,2,0,3,0,5,-1,4,-5};
        appendZero(arr);
       for (int result : arr){
           System.out.print(result+" ");
       }
    }

}

这样的结果是不能保证非0的数组元素顺序的:

 

 所以可以用空间换时间的方法做:

 

public class Test3 {
    public static void appendZero(int[] arr) {
        int right = arr.length - 1;
        int indexResultArr = 0;
        int[] resultArr  =new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]==0) {
                resultArr[right]=0;
                right--;
            }else if (arr[i] !=0){
                resultArr[indexResultArr]=arr[i];
                indexResultArr++;
            }
        }

        for(int i=0; i<arr.length; i++) {
            arr[i]=resultArr[i];
        }

    }

    public static void main(String[] args) {

        int[] arr = { 1, 2, 0, 3, 0, 5, -1, 4, -5 };
        appendZero(arr);
        for (int result : arr) {
            System.out.print(result + " ");
        }
    }

}

这样是比较简单的

 

区分16个数,正数负数和零 单片机实验 将-8到1的16个数放入30H开始的RAM区,其中正数、负数分别送40H和50H开始的存储单元,正数、负数和零的个数分别送到单元60H,61H,62H。 立即下载

相关推荐

WinForm轻松打造AntDesign现代化工具栏

摘要: 本文介绍如何在WinForm中利用AntdUI库实现AntDesign风格工具栏,包括安装配置、动态生成按钮/下拉菜单、布局优化及主题美化。通过AntButton、AntDropdown等控件结合事件绑定,可快速构建支持图标、工具提示、权限控制的现代化工具栏,并解决常见图标加载、布局错乱问题。最后提供代码示例与响应式设计技巧,助你打造高效美观的WinForm界面。 (字数:150)

java专栏 1593

Redis教程(二)字符串(String)类型

Redis教程(二) 字符串(String)类型 1 Redis数据类型 Redis的键值可以支持数据类型:字符串,列表,散表,集合,有序集合、HyperLogLog,通过选用不同的数据结构,用户可以使用Redis解决各式各样的问题。 1.1 字符串(String)类型 字符串是Redis值的最基础的类型。Redis字符串是二进制安全的,这意味着一个Redis字

awhip9的博客 562

在Ubuntu 22.04 LTS上搞定Intel Quartus Prime 22.1和QuestaSim:一份保姆级的安装与License配置指南

本文提供在Ubuntu 22.04 LTS上安装和配置Intel Quartus Prime 22.1与QuestaSim的详细指南。涵盖依赖安装、环境变量设置、License配置及常见问题解决,帮助FPGA开发者快速搭建稳定的开发环境。特别针对Ubuntu系统优化,确保工具链高效运行。

weixin_29208077的博客 318

python-字符串详细卷(懒虫期末总结)

python-字符串详细卷(懒虫期末总结) 字符串基本用法: 字符串可以被单引号,双引号,三引号引起来 若字符串中已经有引号,可以使用更高一级的引号引起来 在python中,字符串可以乘上数字,表示复制 my_str="my_name is '小家伙'" str='hello'*3 print(str) hellohellohello input() 函数得到的就是字符串 str=input("请输入你的成绩:") print(type(str)) # 请输入你的成绩:88 # <class 's

m0_59076472的博客 738

CPU系统级验证——测试激励——imperas公司riscvOVPsimPlus文件分析

本分析重点关注该repo向量扩展部分。 1. repo简介 该repo是指令集验证的仿真环境包括,大部分是指令集的测试用例,也包含了一些模拟器,如riscvOVPsimPlus。 主要介绍的是riscvOVPsimPlus指令集模拟器,riscvOVPsimPlus(下面统称ISS)是imperas公司在riscvOVPsim基础上扩充了向量扩展的指令集模拟器,该repo于今年9月份部分开源 什么叫部分开源呢? 首先该repo必须在imperas官网注册下载,而且必须是企业用户(免费邮箱人家瞧不上.

知识,既贵,又便宜。 4459

开源光标主题实战:从Moshi Monsters到自定义指针的完整指南

光标主题是操作系统个性化的重要组成部分,它通过替换系统默认指针图标来改变视觉交互体验。其原理在于操作系统允许用户自定义指针资源文件,这些文件定义了不同状态下的光标图像。从技术价值看,一套设计良好的光标主题不仅能提升桌面美观度,还能增强用户的情感连接和操作愉悦感,是低成本高回报的数字幸福感提升方案。在应用场景上,无论是开发者、设计师还是普通用户,都可以通过更换光标主题来个性化工作环境。本文以热门的Moshi Monsters开源光标项目为例,深入解析了光标主题的设计逻辑、系统适配方案以及二次创作方法,涵盖了W

weixin_30879833的博客 564

python字符串索引为负_python基础之字符串

Python基础变量主要有字符型和数值型两种,相比于数值型数据,字符型数据可以理解成是一种文本,在语言领域的应用更加广泛。Python的字符串数据类型属于不可改变数据类型,所以当创建一个变量的类型为字符串时,这个变量的字符串的字符不可以修改或者删除,只能在一个新的变量上进行操作。Python提供了以下几种方式去标识字符串(str):单引号(')双引号(")三引号('''或者""")'This is...

weixin_42515687的博客 2261

单机多环境部署apollo 2.3.0

理解apollo的整体架构后,对比nacos配置中心功能点,其设计的复杂度以及完整度相较nacos而言更为丰富 对于不同的环境,例如 FAT, PRO 在部署时进程已经完全物理隔离,并且每个环境config/adminservice依赖的数据也完全物理隔离(连接不同的db),在数据隔离与安全方面做的很完善,但同时也提升了架构的复杂度 而 portal 可以管理多个环境,单节点部署虽然有单点问题,但并不会影响业务从configservice读取配置, 挂掉只要重启就可以,只是在

Life is a starting point everywhere 1299

每日一道Leetcode算法——移动零——2019.01.27

中文: 给定一个数组nums,写一个函数将所有0移动到它的末尾,同时保持非零元素的相对顺序。 Example: Input: [0,1,0,3,12] Output: [1,3,12,0,0] 注意: 您必须就地执行此操作,而无需复制阵列。 最小化操作总数。 英文: Given an array nums, write a function to move all 0's to the end...

third_的博客 419

Java高频面试基础问题与知识点整理

Java高频面试知识点总结:覆盖高频基础知识考点+高频集合知识点深入分析+高频多线程与并发编程面试题汇总+其他扩展考察等。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 172万+

ansys非线性分析中接触类型

不分离(No Separation)‌:法向始终保持接触不分离,切向允许自由滑动,属于线性接触,适合需要法向约束、允许微小切向位移的场景,比如过盈配合的简化模拟。有摩擦(Frictional)‌:法向允许分离,切向根据用户设置的摩擦系数计算摩擦力,是工程中最符合实际机械接触的类型,绝大多数装配体分析都选择该类型。无摩擦(Frictionless)‌:法向允许接触面分离,切向无摩擦、允许自由滑动,适合模拟理想润滑的光滑接触面,图中当前选择的就是该类型。非线性接触(需要多次迭代,属于真正的非线性接触行为)‌。

qq_15963745的博客 71

【算法题】1.给定一个由正数,负数和0组成的整数数组,将所有为0的元素,挪到数组末尾。2.给定任意一个自然数,获取它重新排列后,下一个比它大的自然数。(Leetcode 031 下一个排列

原文 https://blog.youkuaiyun.com/CloudNineN/article/details/86579081 package com.example.demo.test; import java.util.ArrayList; import java.util.Arrays; public class Jxw { public static void main(Strin...

daixyhymn 563

Unity插件NodeCanvas之行为树的详细教程

NodeCanvas 是一个用于 Unity 的可视化脚本工具,主要用于游戏开发中的行为树、状态机和流程图的设计。它通过节点编辑器的方式,让开发者可以更直观地创建和管理游戏逻辑,减少了传统编码的复杂性。今天我们就来详细介绍一下NodeCanvas插件。

TxNet 1959

负数排在正数前面,

转自:http://qing.blog.sina.com.cn/1570303725/5d98eeed33000hcb.html 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序。思考的过程就略去了,直接说结果吧。我想到的算法,空间复杂度为O(1),时间复杂度为O(N*logN)。首先,定义这样一个过程为“翻转”:(a1,a2,…,am,b1,b2,

知之可否 6315

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

不改变相对顺序,负数左边正数右边

 不改变正负数之间的相对顺序重新排列数组,使得负数位于正数之前; (1)举例: 如:1,7,-5,2,-9,3变成 -5,-9,1,7,2,3 (2)方法一: 从头到尾扫描数组,每次碰到一个正数时,就把位于这个数字之后的所有数字到往前挪动一位。挪动之后在数组的末尾有一个空位,把这个正数填进去。整体的时间复杂度为O(n^2),空间复杂度为O(n) (3)方法二 : 快速排序

legend050709的专栏 3612

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

c语言负数左移右移_如何理解C语言中左移和右移运算符

C语言中左移表示左移运算符,就是把最高位丢弃掉然后在最低位补0;而C语言中的右移就是右移运算法,与左移是相反的,它是往右边挪动若干位。C语言中左移和右移运算符的用法:左移运算符就是把最高位丢弃掉然后在最低位补0;右移运算法与左移是相反的,它是往右边挪动若干位C语言中左移和右移运算符是C语言中的运算符,接下来在文章中将为大家具体介绍这两个运算符是如何使用的,具有一定的参考价值,希望对大家有所帮助【推...

weixin_34478373的博客 1527

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

程序员编程艺术第二十七章:不改变正负数相对顺序重新排列数组(无解?)

第二十七章:不改变正负数之间相对顺序重新排列数组.时间O(N),空间O(1)前言    在这篇文章:九月腾讯,创新工场,淘宝等公司最新面试十三题的第5题(一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序),自从去年九月收录了此题至今,一直未曾看到令人满意的答案,为何呢?    因为一般达不到题目所要求的:时间复杂度O(N),空间O(1),且保证原来正

结构之法 算法之道 7万+

程序员编程艺术第二十七章 不改变正负数相对顺序重新排列数组 无解

程序员编程艺术第二十七章 不改变正负数相对顺序重新排列数组 无解

gdfyug的博客 236

c语言负数左移右移_C语言中的左移与右移

先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<i = i << 2; //把i里的值左移2位也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了(有符号数不完全适用,因为左移有可能导...

weixin_39837105的博客 677

分子分母同时加同一个正数,分数向 1 靠拢

“一”是比例世界的固定点。把分子分母同时加同一个正数,像是在比率与标准之间搭一座小桥,让结果朝着“一”走近一步。规律短小而可靠,背后是“用一撮稳态调和不确定”的朴素智慧。

qq_40286307的博客 1208

c语言负数左移右移_C语言里的左移和右移运算

C语言里的左移和右移运算先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用运算符.例如:int i = 1;i = i 2; /把i里的值左移2位也就是说,1的2进制是000.0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成000.0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了(有符号数不完全适...

weixin_30806145的博客 1395

为什么计算机要使用反码/补码

一、为什么需要反码? 反码的作用就相当于数学中的负数。 对于小学生来说,会做的算术题是:5-3,但是不会做3-5。于是,我们上初中的时候,数学里就引进了一个新的概念:负数。引入负数之后,本来是减法的运算就可以变成加法来实现: 3-5=3+[-5]=[-2],中括号代表“负数”,“负数”就是我们人为给出的数学术语。 对于计算机来说,会做的算术题是:5+3,但是不会做3-5。于是,我们就在编码里引进了一个新的概念:反码。引入反码之后,本来是减法的运算就可以变成加法来实现: 3-5=3+[-5]=[-2

kimichen123的专栏 7772
上一篇: 数组奇数左边偶数右边位置不变
下一篇: 输出下一个大自然数
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值