1.如何求一个数组中两个数为某个特定值的任意两个数(不重复)
解这道题的思想是,我们可以先把数组排个序,然后把最小值和最大值去相加,如果超过了特定值,则说明两个数中必须有一个数要小一点,因为数组已经排过序了,所以最小值不能再往下减了,只能最大值往下减。如果是小于特定值,说明只能最小值往上加了。代码如下:
public static List<LongObject> findSum(ArrayIns arr){
arr.quickSort();
int low = 0;
int high = arr.getTheArray().length-1;
List<LongObject> list = new ArrayList<LongObject>();
while(low<high){
if(arr.getTheArray()[low]+arr.getTheArray()[high]==SUM_LONG){
LongObject longObject = new LongObject();
longObject.setLow(arr.getTheArray()[low]);
longObject.setHigh(arr.getTheArray()[high]);
list.add(longObject);
low++;
high--;
}
if(arr.getTheArray()[low]+arr.getTheArray()[high]<SUM_LONG){
low++;
}else {
high--;
}
}
return list;
}
2.求一个数的乘方
x的y次方,如果y能够被2整除的话,那么x^y=(x^2)^y,否则的话x^y=x*(x^2)^y,所以这道题的解题思路就是递归思想,我们之前的归并排序和快速排序用的也是这种思想。
public static int power(int num,int power){
if(power==1){
return num;
}else{
if(power%2==0){
return power(num,power/2)*power(num,power/2);
}else{
return num*power(num,power/2)*power(num,power/2);
}
}
}