两数之和
public static int[] method(int[] nums, int target) {
int n = nums.length;
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) {
map.put(i, nums[i]); // k:当前值的索引位置,v:数组值
}
/*
5,2,7,11
0:5
1:2
2:7
3:11
找9-2=7找到即可
*/
for (int i = 0; i < n; i++) {
int thatNum = target - nums[i]; // 9-5=4
// 这里从每轮i的下一个数开始判断,防止3,2,4 target=6情况下6-3=3,若仍从第一个数遍历,则返回0,0。
for (int j = i+1; j < n; j++) {
if (map.get(j) == thatNum) {
return new int[]{i,j};
}
}
}
return new int[]{0,0};
}
下一个排列
&&:一定要注意,先判断是否满足范围,再进行其余。
public static void method(int[] nums) {
int k = nums.length - 2;
while (k >= 0 && nums[k] >= nums[k + 1])
k--;
if (k < 0) {
Arrays.sort(nums);
return;
}
int i = k + 2;
// while (nums[i] > nums[k] && i<nums.length) { // 颠倒&&前后语句顺序,将报错
while (i<nums.length && nums[i]>nums[k]) {
i++;
}
int temp = nums[k];
nums[k] = nums[i - 1];
nums[i - 1] = temp;
// 降序改升序
int start = k + 1, end = nums.length - 1;
while (start < end) {
int reTemp = nums[start];
nums[start] = nums[end];
nums[end] = reTemp;
start++;
end--;
}
}