
每日一算法-4-数组
在扫描正数的同时可以扫描负数,原理同正数 添加元素的规则是2i+1 如果负数元素很多,计算回退坐标是 A长度为奇数,回退算法是:A.length-(2i-1),算出来要覆盖的坐标 A的长度为偶数,回退坐标算法:A.length-2i-2,算出来要覆盖的坐标
发布日期:2021-05-07 03:09:23
浏览次数:27
分类:精选文章
本文共 1888 字,大约阅读时间需要 6 分钟。
文章目录
问题
在O(n)时间和O(1)额外空间中重新排列正数和负数
数组包含随机数的正数和负数。重新排列数组元素,以便交替放置正数和负数。正数和负数的数量不必相等。如果有更多正数,它们将出现在数组的末尾。如果还有更多的负数,它们也会出现在数组的末尾。如果输入数组为[-1、2,-3、4、5、6,-7、8、9],则输出应为[9,-7、8,-3、5,- 1,2,4,6]
解决
思路
1,想象一个坐标系,左边都是负数,右边都是正数,有一个虚拟的坐标0
第一步先把所有负数正数按照坐标系排布,大小不考虑 第二步,将坐标按照要求替换即可 不需要创建新数组,时间复杂度和空间复杂度都符合
package array;import java.util.Arrays;/** * @ClassName Make02 * Description TODO **/public class Make02 { public static void main(String[] args) { int[] arr1 = { -1, -2,-3,-4,1,2,3,4,8}; int count=0,temp=0; for (int i = 0; i < arr1.length; i++) { if (arr1[i]<0) { temp =arr1[count]; arr1[count]=arr1[i]; arr1[i]=temp; count++; } } System.out.println(Arrays.toString(arr1)); int mytemp=0; for (int i = 0; i*2+1 <=count &&count+2*i
接下来可以不看
1,假设有数组Aint[] arr1 = { 2,1, 3, -4,5,-6,7,8}
先设定一个空数组B,与A等长
第一遍扫描所有负数,第二次扫描所有正数放在第一次扫描的后面 这样形成一个坐标轴结构,只要根据坐标规则相互替换就行 然而这样开辟了两个空间,不符合,但是可以写,没兴趣可以不继续看 另外一种算法是先将正数坐标扫描到B中,再添加负数坐标 遍历A数组,查看A数组长度为奇数还是偶数(决定后面的数据如何添加,即数组坐标如何计算) 然后将A数组中为正数的放置在B上,坐标规则为2i 将2i坐标超出A长度的,在末尾回退添加 按照案例推理出来的,自己可以算算 A长度为奇数,回退算法是:A.length-2i-2,算出来要覆盖的坐标 A的长度为偶数,回退坐标算法:A.length-(2i+1),算出来要覆盖的坐标 比如图中的元素6,A数组长度为6,偶数,6不小于A的长度,因此需要回退,6-20-1=5,覆盖第五个坐标

package array;import java.util.Arrays;/** * @ClassName Make01 * Description TODO **/public class Make01 { public static void main(String[] args) { int[] arr1 = { 2,-1, -3, -4,-5,-6,7,8},arr2=new int[arr1.length]; int iCountG=0,iGreater=0,iLess=0,iLessL=0,flag_even=0; if (arr1.length%2==0) { flag_even=1; } for (int i = 0; i < arr1.length; i++) { if (arr1[i]>=0) { if (iGreater*2
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月01日 20时45分34秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
SpringBoot2 整合Nacos组件,环境搭建和入门案例详解
2019-03-06
结构与算法(03):单向链表和双向链表
2019-03-06
Hadoop框架:MapReduce基本原理和入门案例
2019-03-06
ThreadPoolExecutor线程池任务执行失败的时候会怎样
2019-03-06
Sentry快速开始并集成钉钉群机器人
2019-03-06
Docker 服务
2019-03-06
第一眼就心动的人还怎么做朋友
2019-03-06
Cassandra数据建模
2019-03-06
Elasticsearch Web管理工具
2019-03-06
Git 配置SSH公钥、私钥
2019-03-06
极客时间离线课堂
2019-03-06
Spring Session
2019-03-06
koa2 中间件里面的next到底是什么
2019-03-06
在create-react-app创建的项目下允许函数绑定运算符
2019-03-06
博客园新闻频道开始公开测试
2019-03-06
评论表聚集索引引起的评论超时问题
2019-03-06
博客园上海俱乐部4月份活动通知邀请函已经发出!
2019-03-06
上周热点回顾(5.24-5.30)
2019-03-06
Internet Explorer 10 专题上线
2019-03-06
云计算之路-阿里云上:0:25~0:40网络存储故障造成网站不能正常访问
2019-03-06