怎么做招标公司网站,前程无忧网深圳网站建设类岗位,素材之家,成都网站建设方案优化977. 有序数组的平方 已解答 简单 相关标签 相关企业 给你一个按 非递减顺序 排序的整数数组 nums#xff0c;返回 每个数字的平方 组成的新数组#xff0c;要求也按 非递减顺序 排序。 示例 1#xff1a; 输入#xff1a;nums [-4,-1,0,3,10]
输出#xff1a;[0,1,9,16,… 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] 104nums 已按 非递减顺序 排序 进阶 请你设计时间复杂度为 O(n) 的算法解决本问题 题解
class Solution {public int[] sortedSquares(int[] nums) {for(int i 0; i nums.length; i){nums[i] nums[i] * nums[i];}int[] nums1 new int[nums.length];int left 0;int right nums.length-1;int i nums1.length-1;while(left right){if(nums[left] nums[right]){nums1[i--] nums[left];}else{nums1[i--] nums[right--];}}return nums1;}
}
本题使用双指针思想实际上排序过程是不通用的本来一个正负向的有序数组在平方后顺序发生了变化但还是有一定规律所以这里用双指针可以轻松做出来 代码 测试用例 测试用例 测试结果 209. 长度最小的子数组 已解答 中等 相关标签 相关企业 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] 并返回其长度。如果不存在符合条件的子数组返回 0 。 示例 1 输入target 7, nums [2,3,1,2,4,3]
输出2
解释子数组 [4,3] 是该条件下的长度最小的子数组。示例 2 输入target 4, nums [1,4,4]
输出1示例 3 输入target 11, nums [1,1,1,1,1,1,1,1]
输出0提示 1 target 1091 nums.length 1051 nums[i] 105 进阶 如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。 class Solution {public int minSubArrayLen(int target, int[] nums) {if(nums.length 0){return 0;}else if(nums.length 1 nums[0] target){return 0;}else if(nums[0] target){return 1;}int slowI 0;int fastI 0;int sum nums[0];int size 0;//窗口长度while(slowI nums.length - 1){if(sum target fastI nums.length - 1){sum nums[fastI];}if(sum target){if(size ! 0){size Math.min(fastI - slowI 1,size);}else size fastI - slowI 1;sum - nums[slowI];}if(fastI nums.length - 1 sum target){return size;}}return size;}
} 这题也是使用双指针利用一个窗口不断滑动其中边界问题调试了挺久思路是快指针先动留一个sum记录当前数字的和然后往前加在这期间慢指针不动然后当大于sum大于target后开始不断减慢指针指向的数据缩减窗口大小最后找出最合适的答案。 代码 测试用例 测试结果 测试结果 59. 螺旋矩阵 II 已解答 中等 相关标签 相关企业 给你一个正整数 n 生成一个包含 1 到 n2 所有元素且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1 输入n 3
输出[[1,2,3],[8,9,4],[7,6,5]]示例 2 输入n 1
输出[[1]]提示 1 n 20 class Solution {public int[][] generateMatrix(int n) {int loop 0; // 控制循环次数int[][] res new int[n][n];int start 0; // 每次循环的开始点(start, start)int count 1; // 定义填充数字int i, j;while (loop n / 2) { // 判断边界后loop从1开始// 模拟上侧从左到右for (j start; j n - loop; j) {res[start][j] count;}// 模拟右侧从上到下for (i start; i n - loop; i) {res[i][j] count;}// 模拟下侧从右到左for (; j loop; j--) {res[i][j] count;}// 模拟左侧从下到上for (; i loop; i--) {res[i][j] count;}start;}if (n % 2 1) {res[start][start] count;}return res;}
} 这一题思想不难但是各种边界和执行条件真的要好好确认