- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试解决这个面试问题。我能够获得 O(N) 空间复杂度的 O(N) 解决方案。我想弄清楚是否有O(1) 空间的解决方案?
问题:
给定一个未排序的正数和负数数组。创建交替正数和负数的数组而不分别改变正数和负数的相对顺序。
输入:
输入的第一行包含一个整数 T,表示测试用例的数量。每个测试用例的第一行是N,N是数组的大小。每个测试用例的第二行包含 N 个输入 a[]。
输出:
打印一组交替的正数和负数。注意:解决方案应以正数开头。
约束:
1≤T≤301≤N≤100-1000 ≤ a[] ≤ 1000
示例:
输入
1
9
9 4 -2 -1 5 0 -5 -3 2
输出
9 -2 4 -1 5 -5 0 -3 2
.
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG {
public static void main (String[] args) {
//code
Scanner sn = new Scanner(System.in);
int T = sn.nextInt();
for(int i=0; i<T; i++){
int N = sn.nextInt();
ArrayList<Integer> arr = new ArrayList<Integer>();
ArrayList<Integer> pv_arr = new ArrayList<Integer>();
ArrayList<Integer> ne_arr = new ArrayList<Integer>();
for(int j=0; j<N; j++){
int num = sn.nextInt();
if(num<0){
ne_arr.add(num);
}else{
pv_arr.add(num);
}
}
int maxLen = Math.max(pv_arr.size(), ne_arr.size());
for(int k = 0; k < maxLen; k++){
if(k < pv_arr.size()){
System.out.print(pv_arr.get(k) + " ");
}
if(k < ne_arr.size()){
System.out.print(ne_arr.get(k) + " ");
}
}
System.out.println(" ");
}
}
}
我的答案创建了两个数组 positive 和 negative 并交替打印它们。我尝试使用两个指针(一个正值和一个负值)我不确定如何用 O(N) 和 O(1) 空间解决这个问题。
最佳答案
如果您不直接获取数组作为函数的输入,而是必须从标准输入流中读取数字,则意味着您必须创建数组 自己。问题还指出:
The first line... The second line...
暗示输入是逐行提供给您的,而不是作为函数的参数。
这意味着就空间而言,最佳解决方案是 O(n)。您已经找到了一个可行的解决方案,但您仍然可以像您自己所说的那样使用“指针”方法来简化它:
public static void main (String[] args) {
Scanner sn = new Scanner(System.in);
int T = sn.nextInt();
for(int i=0; i<T; i++){
int N = sn.nextInt();
int[] numbers = new int[N];
int neg_ind = 1;
int pos_ind = 0;
for(int j=0; j<N; j++){
int num = sn.nextInt();
if(num < 0){
numbers[neg_ind] = num;
neg_ind += 2;
}else{
numbers[pos_ind] = num;
pos_ind += 2;
}
}
System.out.println(Arrays.toString(numbers));
}
}
关于algorithm - +ve 和 -ve nums 的拆分数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40593484/
我正在使用模拟 Collatz conjecture 的简单脚本对不同平台和语言进行基准测试.在测试期间,我发现我的 arduino 卡在种子 447 上,其中将 int 13121 乘以三得到 -2
我不知道之前是否有人问过这个问题,但这是我的:如果我有以下代码;总计的值(value)是多少?因为输出总是+ve值而不是-ve,或者请指导我哪里错了。谢谢。P.S: 我正在使用 Turbo C 3.o
我正在尝试解决这个面试问题。我能够获得 O(N) 空间复杂度的 O(N) 解决方案。我想弄清楚是否有O(1) 空间的解决方案? 问题: 给定一个未排序的正数和负数数组。创建交替正数和负数的数组而不分别
想象一个正弦波围绕零线振荡。我的任务是使用相当粗略的 x 轴刻度来计算沿波浪的几个随机点的斜率。 (是的,这有一个真正的应用) 当波浪位于 +ve terrirtory(零线以上)时,可以通过以下方式
任务是找到所有连续子集,或者更好地说具有特定总和的子数组,其中子集可以包含正整数和负整数例子:对于子集={1,-1,1,-1,1}所有导致总和为 1 的子集是: {1} {1,-1,1} {1} {1
我知道要将字符序列转换为整数,我们可以使用此语句 String cs="123"; int number = Integer.parseInt(cs.toString()); 如果 cs = "
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: which algorithm can do a stable in-place binary partit
我有一个按钮,悬停时会将其宽度从 50px 更改为 300px。但它只在一侧这样做(正面或负面)。我想要将其宽度更改为 300px,两侧为 150px。 .container-2 { width:
我试过了 Python .我知道使用整数并进行除法只会返回商的整数值,截断小数部分。关于这一点: 3 / 2 = 1 听起来完全没问题......但是当股息为负时,我很难理解幕后发生的事情?? -3
我有以下数据 primary,first,second 1,393440.09,354096.08 1,4410533.33,3969479.99 1,-4803973.41,-4323576.07
虽然我不是 java 的新手,但前几天我观察到了这种奇怪的行为。我通过运行由基本算术运算组成的代码来复习我的基础知识。现在根据 java(当然还有算术的基本规则),-ve * -ve 或 -ve/-v
我有一些混合正值和负值的数据,每个变量的绝对值之和 = 100%以下是一些示例数据: Out01 = [79.069,-1.602,5.067,-4.241,-5.433,-4.590] Out02
我在 stackoverflow 网站上查看了我的答案,我没有得到,所以我把它贴在这里。 我的问题是: How to compare two time stamp in format "Month D
我已经为上述问题编写了一个解决方案,但是有人可以建议一个优化的方法吗?我已经遍历了 count(2 到 n) 的数组,其中 count 正在查找大小为 count*count 的子数组。 int n
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Left shifting with a negative shift count 考虑我的代码如下 int
我想在 Proxmox ve 5 上创建多个用户,我的问题是我已经在/etc/pve/user.cfg 中创建了它们,但我无法为它们分配密码。有人可以帮助我吗?谢谢 最佳答案 只需创建“普通”系统用户
我首先要说的是我是 Javascript 新手。关于这个问题,我非常有信心我可以完成后一部分,但是我在“读取n个数字”方面遇到了问题。这是我尝试过的 var arr = []; arr.push(pr
在我的一个 html 页面中,我有如下所示的段落标记。 my text here 在 vb6 web 浏览器控件中,我们加载这些页面并根据特定条件突出背景颜色。它适用于所有文本和 html 元素。但是
正整数的二进制权重是其二进制表示中 1 的个数。例如,十进制数1的二进制权重为1,十进制数7(二进制为111)的二进制权重为3。 给定一个正整数N,找到大于N且与N具有相同二进制权重的最小整数。 pu
ve有什么用在 execve意思? 我通读了man execve但没看懂是什么意思。我认为它可能是“矢量”但不确定。 ve有什么用意思? 最佳答案 execve()是 exec*() 家族的 POSI
我是一名优秀的程序员,十分优秀!