我:交换价值
String a1 = "Hello";
String a2 = "World";
我想a2 becomes a1
和a1 becomes a2
即他们交换价值。
否则无需编写一个函数:
a1 = "World";
a2 = "Hello";
要编写能够做到在迭代的最小数量的功能。
我:交换价值
String a1 = "Hello";
String a2 = "World";
我想a2 becomes a1
和a1 becomes a2
即他们交换价值。
否则无需编写一个函数:
a1 = "World";
a2 = "Hello";
要编写能够做到在迭代的最小数量的功能。
由于String
是不可改变的在Java中, 你不能改变的a1
和a2
, 的价值,问题是相当混乱。
你可以做的是交换的变量:
String tmp = a1;
a1 = a2;
a2 = tmp;
但我怀疑这是一个锻炼,也许它的目的更多的是这样的:
鉴于
char[] a1 = {"h", "e", "l", "l", "o"}
和char[] a2 = ...
,交换他们值的最小步数而不重新分配这些变量。
然后,您将迭代数组的元素 并按照字符执行交换操作,就像我之前在字符串中执行的操作一样。
这里是一个解决方案:
a1 += a2;
a2 = a1.replaceFirst(a2 + "$", "");
a1 = a1.replaceFirst("^" + a2, "");
这里的另一种方式:
x = new String[] { y, y = x }[0];
我测试了它,和它一样快,因为其他的方法。看看:
data <- read.csv("~swapVars.csv")
dim(data)[1] #Size of dataset
# [1] 3799582
head(data) # Preview of data (Nano Seconds)
# oldWay newWay
# 1 75 75
# 2 82 83
# 3 67 67
# 4 75 67
# 5 98 60
# 6 75 75
summary(data)
# oldWay newWay
# Min. : 52 Min. : 52
# 1st Qu.: 60 1st Qu.: 60
# Median : 60 Median : 60
# Mean : 84 Mean : 78
# 3rd Qu.: 67 3rd Qu.: 67
# Max. :16032716 Max. :8381087
t.test(data$oldWay, data$newWay)
# Welch Two Sample t-test
#
# data: data$oldWay and data$newWay
# t = 0.7796, df = 7237880, p-value = 0.4356
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
# -9.516198 22.087260
# sample estimates:
# mean of x mean of y
# 83.96287 77.67734
那么这是什么意思呢,我测试了两种方法3,799,582次随机放置和随机文本消除第三个变量。然后我对这两个数据集进行了t检验,发现我的方式或旧方式之间没有显着差异,关于时间延迟(Nano Seconds)。
时代确实有所不同,但可以肯定地说,我的方法不仅更短,而且速度也与旧方式一样快。
根本不需要迭代。你根本就不需要这个循环。你的意思是*说明*? –
在'tmp'中存储'a1'。指定'a1 = a2'。分配'a2 = tmp'。这是标准['swap'操作](https://en.wikipedia.org/wiki/Swap_(computer_science)#Using_a_temporary_variable)。 –
为什么@Amila不能看到我试过的东西?为什么鲍里斯不能在答案框中编写解决方案?为什么安迪不明白这些意义?为什么downvoters不关心评论? – paul