以最少的迭代次数在两个字符串值之间交换值
swap values between two String values in minimum iterations
我有:
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;
但我怀疑这是一个练习,也许它的目的更像是这样:
Given char[] a1 = {"h", "e", "l", "l", "o"}
and char[] a2 = ...
, swap their values in the minimum number of steps without reassigning these variables.
然后你会遍历数组的元素,
并像我之前对字符串所做的那样逐个字符地执行交换。
解决方法如下:
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 检验,发现我的方法和旧方法在时间延迟(纳秒)方面没有显着差异。
时间确实有所不同,但可以肯定地说,我的方法不仅更短,而且与旧方法一样快。
我有:
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;
但我怀疑这是一个练习,也许它的目的更像是这样:
Given
char[] a1 = {"h", "e", "l", "l", "o"}
andchar[] a2 = ...
, swap their values in the minimum number of steps without reassigning these variables.
然后你会遍历数组的元素, 并像我之前对字符串所做的那样逐个字符地执行交换。
解决方法如下:
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 检验,发现我的方法和旧方法在时间延迟(纳秒)方面没有显着差异。
时间确实有所不同,但可以肯定地说,我的方法不仅更短,而且与旧方法一样快。