有序数组的平方(977)
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100] 示例 2:输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121]
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104 nums 已按 非递减顺序 排序来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/squares-of-a-sorted-array
public int[] sortedSquares(int[] nums) {
int[] arr=new int [nums.length];
for (int i = 0; i < arr.length; i++) {
arr[i]=nums[i]*nums[i];
}
Arrays.sort(arr);//题目要求按非递减顺序排列,那么可以按照递增顺序
return arr;
}
双指针写法
class Solution {
public int[] sortedSquares(int[] nums) {
int[] arr = new int[nums.length];
int left = 0, right = nums.length - 1, index = nums.length - 1;
while (left <= right) {
if (nums[right] * nums[right] < nums[left] * nums[left]) {
arr[index--] = nums[left] * nums[left];
left++;
} else {
arr[index--] = nums[right] * nums[right];
right--;
}
}
return arr;
}
}
轮转数组(189)
给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
示例 1: 输入: nums = [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]
示例 2:输入:nums = [-1,-100,3,99], k = 2 输出:[3,99,-1,-100] 解释:
向右轮转 1 步:[99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]提示:
1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1 0 <= k <= 105来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/rotate-array
在每一轮转动中,数组中对应元素会向右移动1个单位
class Solution {
public void rotate(int[] nums, int k) {
int[] arr = new int[nums.length];
for (int i = 0; i < nums.length; i++) {
arr[(i + k )% nums.length] = nums[i];
}
System.arraycopy(arr, 0, nums, 0, nums.length);
}
}
在System.arraycopy()方法中,arr为源,第一个0为起始位置,nums为目标数组,第二个0为目标数组的起始位置,nums.length为拷贝长度,通俗来说,就是将数组arr的元素对应的赋给nums。
class Solution {
public void rotate(int[] nums, int k) {
int[] arr = new int[nums.length];
for (int i = 0; i < nums.length; i++) {
arr[(i + k )% nums.length] = nums[i];
}
for (int i = 0; i < arr.length; i++) {
nums[i]=arr[i];
}
}
}
注:这道题最后还是要回归到nums数组中,另设的数组符合条件不行。