Как насчет этого:
import java.util.ArrayList;
import java.util.List;
public class KSmallestPairs {
public static void main(String[] args) {
System.out.println(kSmallestPairs(new int[]{1,7,11}, new int[]{2,4,6}, 3));
}
public static List<SumPair> kSmallestPairs(int[] leftInts, int[] rightInts, int k) {
if (k < 1) {
throw new IllegalArgumentException("k (=" + k + ") must higher than 0!");
} else if (leftInts.length * rightInts.length < k) {
throw new IllegalArgumentException("k (=" + k
+ ") cannot be higher than the length of the cartesian product (="
+ leftInts.length * rightInts.length + ")");
}
final List<SumPair> sumPairs = new ArrayList<>();
int minLeftIndex = 0;
int minRightIndex = 0;
for (int leftIndex = 0, rightIndex = 0;
leftIndex < leftInts.length
&& rightIndex < rightInts.length
&& sumPairs.size() < k; ) {
final int leftInt = leftInts[leftIndex];
final int rightInt = rightInts[rightIndex];
sumPairs.add(new SumPair(leftInt, rightInt));
if(leftIndex + 1 < leftInts.length && rightIndex + 1 < rightInts.length) {
final int nextLeftInt = leftInts[leftIndex + 1];
final int nextRightInt = rightInts[rightIndex + 1];
final int sumOfLeftIntAndNextRightInt = leftInt + nextRightInt;
final int sumOfNextLeftIntAndRightInt = nextLeftInt + rightInt;
if(sumOfLeftIntAndNextRightInt < sumOfNextLeftIntAndRightInt) {
rightIndex++;
} else {
leftIndex++;
}
} else if(leftIndex + 1 < leftInts.length) {
leftIndex++;
rightIndex = minRightIndex;
minLeftIndex++;
} else if(rightIndex + 1 < rightInts.length) {
leftIndex = minLeftIndex;
rightIndex++;
minRightIndex++;
}
}
return sumPairs;
}
static class SumPair {
private final int leftInt;
private final int rightInt;
public SumPair(int leftInt, int rightInt) {
this.leftInt = leftInt;
this.rightInt = rightInt;
}
public int getLeftInt() {
return leftInt;
}
public int getRightInt() {
return rightInt;
}
public int getSum() {
return leftInt + rightInt;
}
@Override
public String toString() {
return leftInt + "+" + rightInt + "="+ getSum();
}
}
}
Вывод:
[1+2=3, 1+4=5, 1+6=7, 7+2=9]
Он с готовностью находит k наименьшей пары сумм.
С класс WebClient:
using System.Net;
//...
WebClient Client = new WebClient ();
Client.DownloadFile("http://i.stackoverflow.com/Content/Img/stackoverflow-logo-250.png", @"C:\folder\stackoverflowlogo.png");
Несомненно, Вы просто используете HttpWebRequest
.
, После того как Вы имеете эти HttpWebRequest
настроенный, можно сохранить ответный поток в файл StreamWriter
(Или BinaryWriter
, или TextWriter
в зависимости от mimetype.) и у Вас есть файл на Вашем жестком диске.
РЕДАКТИРОВАНИЕ: Забыл приблизительно WebClient
. Это работает хорошее, если, пока Вы только не должны использовать GET
для получения файла. Если сайт требует Вас к POST
информация к нему, необходимо будет использовать HttpWebRequest
, таким образом, я оставляю на виду свой ответ.
Используйте WebClient.DownloadFile
:
using (WebClient client = new WebClient())
{
client.DownloadFile("http://csharpindepth.com/Reviews.aspx",
@"c:\Users\Jon\Test\foo.txt");
}