15天算法入门(二)

简介: 本文主要讲有序数组的平方和旋转数组

网络异常,图片无法展示
|


网络异常,图片无法展示
|


有序数组的平方



给你一个按 非递减顺序 排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

 


示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]


题解


将该题转为求最小值位置,然后顺序排序。先将数组中数值平方后,然后求得最小值的位置。将最小值放到一个新的数组中。


使用归并排序核心,左右指针遍历数组,将从最小值位置分别向两端遍历,将小的放到新的数组中。返回改新数组。


网络异常,图片无法展示
|

找到最小值位置后,左右两边为l、r指针。比较两者所指位置的值,将小值放入到新的数组中,对应的指针移动一步。

网络异常,图片无法展示
|

在左右指针有一边走到头时,就单独遍历没有走到头的一边。


代码


var sortedSquares = function (nums) {
    let min = 0
    for (let i = 0; i < nums.length; i++) {
        nums[i] = Math.pow(nums[i], 2)
        min = nums[min] > nums[i] ? i : min
    }
    let arr = []
    arr[0] = nums[min]
    let l = min - 1, r = min + 1, index = 1
    while (l >= 0 && r < nums.length) arr[index++] = nums[l] > nums[r] ? nums[r++] : nums[l--]
    while (l >= 0) arr[index++] = nums[l--]
    while (r < nums.length) arr[index++] = nums[r++]
    return arr
};


旋转数组


给定一个数组,将数组中的元素向右移动 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]


题解


思路一:


使用新的数组,将倒数k个数push到新数组中(nums.length - k +1),然后将0到nums.length - k个数顺序push到数组中。最后返回新的数组。

网络异常,图片无法展示
|


思路二:

在原数组上,将末尾的数出栈,使用变量存贮,然后从头部压入,循环k次。


网络异常,图片无法展示
|
思路三:

搞一个从i到j位置反转数组的函数。先将数组整体反转。然后,从k位置分开,两边分别反转。

网络异常,图片无法展示
|


代码


思路三:


var rotate = function (nums, k) {
    reverse(nums, 0, nums.length - 1)
    reverse(nums, 0, (k % nums.length) - 1)
    reverse(nums, (k % nums.length), nums.length - 1)
    return nums
};
function reverse(nums, i, j) {
    while (i < j) {
        swap(nums, i++, j--)
    }
}
function swap(nums, i, j) {
    let temp = nums[i]
    nums[i] = nums[j]
    nums[j] = temp
}


题目来源:leetcode

目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 算法
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
本文全面介绍了人工智能(AI)的基础知识、操作教程、算法实现及其在实际项目中的应用。首先,从AI的概念出发,解释了AI如何使机器具备学习、思考、决策和交流的能力,并列举了日常生活中的常见应用场景,如手机助手、推荐系统、自动驾驶等。接着,详细介绍了AI在提高效率、增强用户体验、促进技术创新和解决复杂问题等方面的显著作用,同时展望了AI的未来发展趋势,包括自我学习能力的提升、人机协作的增强、伦理法规的完善以及行业垂直化应用的拓展等...
148 3
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
|
2月前
|
机器学习/深度学习 数据采集 人工智能
机器学习算法入门与实践
【7月更文挑战第22天】机器学习算法入门与实践是一个既充满挑战又极具吸引力的过程。通过掌握基础知识、理解常见算法、注重数据预处理和模型选择、持续学习新技术和参与实践项目,你可以逐步提高自己的机器学习技能,并在实际应用中取得优异的成绩。记住,机器学习是一个不断迭代和改进的过程,保持好奇心和耐心,你将在这个领域走得更远。
|
2月前
|
消息中间件 存储 算法
实战算法的基础入门(2)
实战算法的基础入门
|
2月前
|
算法 大数据
实战算法的基础入门(1)
实战算法的基础入门
|
1月前
|
存储 算法
【C算法】编程初学者入门训练140道(1~20)
【C算法】编程初学者入门训练140道(1~20)
|
2月前
|
算法 Java
实战算法的基础入门(3)
实战算法的基础入门
|
3月前
|
算法 程序员
高阶算法班从入门到精通之路
高阶算法班从入门到精通之路
30 3
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习算法入门:从K-means到神经网络
【6月更文挑战第26天】机器学习入门:从K-means到神经网络。文章涵盖了K-means聚类、逻辑回归、决策树和神经网络的基础原理及应用场景。K-means用于数据分组,逻辑回归适用于二分类,决策树通过特征划分做决策,神经网络则在复杂任务如图像和语言处理中大显身手。是初学者的算法导览。
|
3月前
|
自然语言处理 算法
ransformers从入门到精通:常用的subword tokenizer算法
- WordPiece、BPE/BBPE最小字词进行合并最终字词,BPE/BBPE直接采用词频判断合并规则而WordPiece采用最大似然的方式 - unigram采用从最大的字词集合里移除那些对语料库整体概率贡献最小的子词【6月更文挑战第7天】
75 3
|
3月前
|
存储 自然语言处理 算法
位运算入门及简单算法题的应用
位运算入门及简单算法题的应用
26 1