1.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标,假设每种输入只会对应一个答案。
(因为是两个数,所以下标值,有两个,所以该方法返回一个int[],里面包含两个整数对应的数组下标)
代码:
import java.util.Arrays;
public class exercise0601 {
public static void main(String[] args){
int[] nums = {1,5,3,9,2,6};//target=10
int[] n = new int[2];
n = FindTarget(nums, 10);
System.out.println(Arrays.toString(n));
}
public static int[] FindTarget(int[] arr,int target){
int[] result = new int[2];
for(int i=0;i<arr.length - 1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i] + arr[j] == target){
result[0] = i;
result[1] = j;
break;
}
}
}
return result;
}
}
运行结果:
2.给定一个数组,将数组中的元素循环向右移动 k 个位置,其中 k 是非负数。
举例 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4]
解释:
向右循环移动 1 位: [7,1,2,3,4,5,6]
向右循环移动 2 位: [6,7,1,2,3,4,5]
向右循环移动 3 位: [5,6,7,1,2,3,4]
代码:
import java.util.Arrays;
import java.util.Scanner;
public class exercise0602 {
public static void main(String[] args){
int[] arr = {1,2,3,4,5,6,7};
System.out.println("请输入向右移动的位数:");
Scanner sc = new Scanner(System.in);
int k = sc.nextInt();
RightShift(arr,k);
System.out.println("移动后的数组:");
System.out.println(Arrays.toString(arr));
}
public static void RightShift(int[] arr,int k){
int n = arr.length - 1;
for(int i = 0;i < k; i++){
int temp = arr[n];
for(int j = n;j > 0;j--){
arr[j] = arr[j-1];
}
arr[0] = temp;
}
}
}
运行结果:
优化后的代码:
import java.util.Arrays;
public class Rotate {
public static void main(String[] args){
int[] arr = {1,2,3,4,5,6,7};
rotate(arr, 3);
System.out.println("移动后的数组:");
System.out.println(Arrays.toString(arr));
}
public static void rotate(int[] arr, int k){
k %= arr.length;
reverse(arr, 0 , arr.length - 1);
reverse(arr, 0, k - 1);
reverse(arr, k, arr.length - 1);
}
public static void reverse(int[] arr, int start, int end){
while (start < end){
int tmp = arr[start];
arr[start] = arr[end];
arr[end] = tmp;
start++;
end--;
}
}
}
#个人学习记录,如发现有错误之处,欢迎与我交流