已解答 简单
相关标签
相关企业给你一个按 非递减顺序 排序的整数数组 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
已按 非递减顺序 排序
进阶:
- 请你设计时间复杂度为
O(n)
的算法解决本问题
func sortedSquares(nums []int) []int { //双指针 varres []int res = make([]int, len(nums)) revSlow := len(nums) - 1 left, right := 0, len(nums)-1 for left <= right { ifabs(nums[left]) > abs(nums[right]) { res[revSlow] = nums[left] * nums[left] left++ } else { res[revSlow] = nums[right] * nums[right] right-- } revSlow-- } return res }
func abs(numA int) int { if numA < 0 { return0 - numA } return numA
}
已解答 中等
相关标签
相关企业给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其总和大于等于 target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
示例 1:
输入:输出:解释:
[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 <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 105
进阶:
- 如果你已经实现
O(n)
时间复杂度的解法, 请尝试设计一个O(n log(n))
时间复杂度的解法
func minSubArrayLenOne(target int, nums []int) int { var left, areaSum, minArea int minArea = math.MaxInt32 for right := 0; right < len(nums); right++ { areaSum = nums[right] + areaSum for areaSum >= target { minArea = min(minArea, right-left+1) areaSum -= nums[left] left++ } } if math.MaxInt32 == minArea { return 0 } return minArea }
func min(numA, numB int) int { if numA > numB { return numB } return numA }
已解答 中等
相关标签
相关企业给你一个正整数 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
func generateMatrix(n int) [][]int { varres [][]int res = make([][]int, n) fori := 0; i < n; i++ { res[i] = make([]int, n) } left, right, top, bottom := 0, n-1, 0, n-1 varindexint for left <= right { if left == right { index++ res[top][left] = index break } fori := left; i <= right; i++ { index++ res[top][i] = index } top++ fori := top; i <= bottom; i++ { index++ res[i][right] = index } right-- fori := right; i >= left; i-- { index++ res[bottom][i] = index } bottom-- fori := bottom; i >= top; i-- { index++ res[i][left] = index } left++ } return res } 标签:right,nums,int,res,随想录,数组,第十三天,left From: https://www.cnblogs.com/suxinmian/p/18009534