二分法查找
# 参考java.util.Arrays中的方法binarySearch(int[] a,int value)
public class BinarySearch{
public static int binarySearch(int[] nums,int target){
return binarySearch0(nums,0,nums.length,target);
}
public static int binarySearch0(int[] a,int fromIndex,int toIndex,int key){
int low = fromIndex;
int high = toIndex - 1;
while(low <= high){
int mid = (low + high) >>> 1;
int midVal = a[mid];
if (key < midVal)
high = mid - 1;
else if (key > midVal)
low = mid + 1;
else
return mid;
}
return -(low)+1;
}
public static void main(String[] args){
String[] arguments = args[0].split(",");
int target = Integer.parseInt(args[1]);
int[] nums = new int[arguments.length];
for(int i = 0;i < arguments.length;i++){
nums[i] = Integer.parseInt(arguments[i]);
}
int index = binarySearch(nums,target);
if (index > 0 )
System.out.println("该值的位置: " + index );
else
System.out.println("找不到该值");
}
}
两数之和
import java.util.*;
public class TwoSum{
public static int[] twoSum(int[] nums, int target) {
int[] array = new int[2];
for(int i = 0;i < nums.length - 1;i++){
int key = target - nums[i];
for (int j = i+1;j< nums.length - 1;j++){
if(key == nums[j]){
array[0] = i;
array[1] = j;
return array;
}
}
}
return null;
}
public static void main(String[] args){
String[] strr = args[0].split(",");
List<String> list = new ArrayList<>();
for(int i = 0;i < strr.length;i++){
list.add(strr[i]);
}
int[] nums = new int[list.size()];
for(int i = 0; i < list.size();i++){
nums[i] = Integer.parseInt(list.get(i));
}
for(int i = 0; i < nums.length;i++){
if(i == (nums.length - 1)){
System.out.print(nums[i]+" ");
break;
}
System.out.print(nums[i] +", ");
}
int target = Integer.parseInt(args[1]);
int[] arr = twoSum(nums,target);
if(arr != null && arr.length != 0){
System.out.println("数组的下标为: [ "+ arr[0]+", " + arr[1]+ " ]");
}else{
System.out.println("没有找到合适的两个数字");
}
}
}
两数之和 解法:巧用循环
import java.util.*;
public class TwoSum{
public static int[] twoSum(int[] nums, int target) {
int[] array = new int[2];
for(int i = 0;i < nums.length - 1;i++){
int key = target - nums[i];
for (int j = i+1;j< nums.length - 1;j++){
if(key == nums[j]){
array[0] = i;
array[1] = j;
return array;
}
}
}
return null;
}
public static void main(String[] args){
String[] strr = args[0].split(",");
List<String> list = new ArrayList<>();
for(int i = 0;i < strr.length;i++){
list.add(strr[i]);
}
int[] nums = new int[list.size()];
for(int i = 0; i < list.size();i++){
nums[i] = Integer.parseInt(list.get(i));
}
for(int i = 0; i < nums.length;i++){
if(i == (nums.length - 1)){
System.out.print(nums[i]+" ");
break;
}
System.out.print(nums[i] +", ");
}
int target = Integer.parseInt(args[1]);
int[] arr = twoSum(nums,target);
if(arr != null && arr.length != 0){
System.out.println("数组的下标为: [ "+ arr[0]+", " + arr[1]+ " ]");
}else{
System.out.println("没有找到合适的两个数字");
}
}
}
两数之和 解法:使用HashMap
import java.util.*;
public class TwoSumWay2{
public static int[] twoSum(int[] nums, int target) {
int[] indexs = new int[2];
HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>();
for(int i = 0; i < nums.length; i++){
if(hash.containsKey(nums[i])){
indexs[0] = i;
indexs[1] = hash.get(nums[i]);
return indexs;
}
hash.put(target-nums[i],i);
}
return indexs;
}
public static void main(String[] args){
String[] arguments = args[0].split(",");
int target = Integer.parseInt(args[1]);
int[] nums = new int[arguments.length];
for(int i = 0;i < arguments.length;i++){
nums[i] = Integer.parseInt(arguments[i]);
}
int[] indexs = twoSum(nums,target);
System.out.println("[ " + indexs[0] + ", " + indexs[1] + " ]");
}
}