1、按既定顺序创建目标数组
//给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组: // // // 目标数组 target 最初为空。 // 按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。 // 重复上一步,直到在 nums 和 index 中都没有要读取的元素。 // // // 请你返回目标数组。 // // 题目保证数字插入位置总是存在。 // // // // 示例 1: // // 输入:nums = [0,1,2,3,4], index = [0,1,2,2,1] //输出:[0,4,1,3,2] //解释: //nums index target //0 0 [0] //1 1 [0,1] //2 2 [0,1,2] //3 2 [0,1,3,2] //4 1 [0,4,1,3,2] // // // 示例 2: // // 输入:nums = [1,2,3,4,0], index = [0,1,2,3,0] //输出:[0,1,2,3,4] //解释: //nums index target //1 0 [1] //2 1 [1,2] //3 2 [1,2,3] //4 3 [1,2,3,4] //0 0 [0,1,2,3,4] // // // 示例 3: // // 输入:nums = [1], index = [0] //输出:[1] // // // // // 提示: // // // 1 <= nums.length, index.length <= 100 // nums.length == index.length // 0 <= nums[i] <= 100 // 0 <= index[i] <= i // // Related Topics 数组
第一次看到list有这么神奇的用法,可以直接实现题目中的功能,即按照指定的index插入值
public int[] createTargetArray(int[] nums, int[] index) {
int[] ints = new int[nums.length];
List<Integer> list = new ArrayList<>();
for (int i = 0; i < index.length; i++) {
list.add(index[i], nums[i]);
}
for (int i = 0; i < nums.length; i++) {
ints[i] = list.get(i);
}
return ints;
}
2、找出数组中的幸运数
//在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。 // // 给你一个整数数组 arr,请你从中找出并返回一个幸运数。 // // // 如果数组中存在多个幸运数,只需返回 最大 的那个。 // 如果数组中不含幸运数,则返回 -1 。 // // // // // 示例 1: // // 输入:arr = [2,2,3,4] //输出:2 //解释:数组中唯一的幸运数是 2 ,因为数值 2 的出现频次也是 2 。 // // // 示例 2: // // 输入:arr = [1,2,2,3,3,3] //输出:3 //解释:1、2 以及 3 都是幸运数,只需要返回其中最大的 3 。 // // // 示例 3: // // 输入:arr = [2,2,2,3,3] //输出:-1 //解释:数组中不存在幸运数。 // // // 示例 4: // // 输入:arr = [5] //输出:-1 // // // 示例 5: // // 输入:arr = [7,7,7,7,7,7,7] //输出:7 // // // // // 提示: // // // 1 <= arr.length <= 500 // 1 <= arr[i] <= 500 // // Related Topics 数组
public int findLucky(int[] arr) {
int[] ints = new int[501];
for (int i = 0; i < arr.length; i++) {
ints[arr[i]]++;
}
for (int i = ints.length-1; i > 0; i--) {
if(ints[i] == i){
return i;
}
}
return -1;
}
3、逐步求和得到正数的最小值
//给你一个整数数组 nums 。你可以选定任意的 正数 startValue 作为初始值。 // // 你需要从左到右遍历 nums 数组,并将 startValue 依次累加上 nums 数组中的值。 // // 请你在确保累加和始终大于等于 1 的前提下,选出一个最小的 正数 作为 startValue 。 // // // // 示例 1: // // //输入:nums = [-3,2,-3,4,2] //输出:5 //解释:如果你选择 startValue = 4,在第三次累加时,和小于 1 。 // 累加求和 // startValue = 4 | startValue = 5 | nums // (4 -3 ) = 1 | (5 -3 ) = 2 | -3 // (1 +2 ) = 3 | (2 +2 ) = 4 | 2 // (3 -3 ) = 0 | (4 -3 ) = 1 | -3 // (0 +4 ) = 4 | (1 +4 ) = 5 | 4 // (4 +2 ) = 6 | (5 +2 ) = 7 | 2 // // // 示例 2: // // //输入:nums = [1,2] //输出:1 //解释:最小的 startValue 需要是正数。 // // // 示例 3: // // //输入:nums = [1,-2,-3] //输出:5 // // // // // 提示: // // // 1 <= nums.length <= 100 // -100 <= nums[i] <= 100 // // Related Topics 数组
public int minStartValue(int[] nums) {
int[] ints = new int[nums.length];
for (int i = 0; i < nums.length; i++) {
if(i == 0){
ints[i] = nums[0];
}else{
ints[i] = ints[i-1] + nums[i];
}
}
int min = Integer.MAX_VALUE;
for (int i = 0; i < ints.length; i++) {
if(ints[i] < min){
min = ints[i];
}
}
return 1-min <=0 ? 1 : 1-min;
}