15天算法入门(四)

简介: 本文反转字符串和反转字符串中的单词III

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

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


反转字符串


题目


编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。


不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。


你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

 

示例 1:
输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]


题解


思路一:

找到中间点,设定中间点的左右两边位置为左右指针,分别向两边扩散交换。

中间点需要根据数组长度的奇偶来判断。偶数,左右指针就指向长度一半的前一个位置和一半的位置;奇数,左右指针分别指向中间数的左右两边的位置。

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

设定左右指针,分别指向头和尾。两个指针相向而行,互相交换,当左右指针相遇或左指针超过右指针时,跳出循环,返回数组。

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


代码


思路一:


var reverseString = function (s) {
    let l, r
    if (s.length % 2 === 0) {
        l = (s.length >> 1) - 1
        r = s.length >> 1
    } else {
        l = (s.length >> 1) - 1
        r = (s.length >> 1) + 1
    }
    while (l >= 0 && r < s.length) {
        swap(s, l--, r++)
    }
    return s
};
function swap(arr, i, j) {
    let temp = arr[i]
    arr[i] = arr[j]
    arr[j] = temp
}


思路二:


var reverseString = function (s) {
    let l = 0, r = s.length - 1
    while (l < r) {
        swap(s, l++, r--)
    }
    return s
};
function swap(arr, i, j) {
    let temp = arr[i]
    arr[i] = arr[j]
    arr[j] = temp
}
复制代码


反转字符串中的单词III


题目


给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。  


示例:
输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"


题解


这题主要考察字符串与数组之间切换,还有数组的反转。

先将字符串按空格分割成数组,然后在每个小段字符串中,将其变成数组反转,在拼成字符串。最后用空格将其再拼接成一个长的字符串。


代码


var reverseWords = function (s) {
    let arr = s.split(' ')
    let res = []
    for (let i = 0; i < arr.length; i++) {
        res.push(arr[i].split('').reverse().join(''))
    }
    return res.join(' ')
};


题目来源:leetcode

目录
相关文章
|
24天前
|
存储 算法
算法入门:专题二---滑动窗口(长度最小的子数组)类型题目攻克!
给定一个正整数数组和目标值target,找出总和大于等于target的最短连续子数组长度。利用滑动窗口(双指针)优化,维护窗口内元素和,通过单调性避免重复枚举,时间复杂度O(n)。当窗口和满足条件时收缩左边界,更新最小长度,最终返回结果。
|
1月前
|
存储 算法
算法入门:专题一:双指针(有效三角形的个数)
给定一个数组,找出能组成三角形的三元组个数。利用“两边之和大于第三边”的性质,先排序,再用双指针优化。固定最大边,左右指针从区间两端向内移动,若两短边之和大于最长边,则中间所有组合均有效,时间复杂度由暴力的O(n³)降至O(n²)。
|
1月前
|
存储 算法 编译器
算法入门:剑指offer改编题目:查找总价格为目标值的两个商品
给定递增数组和目标值target,找出两数之和等于target的两个数字。利用双指针法,left从头、right从尾向中间逼近,根据和与target的大小关系调整指针,时间复杂度O(n),空间复杂度O(1)。找不到时返回{-1,-1}。
|
4月前
|
机器学习/深度学习 数据采集 算法
你天天听“数据挖掘”,可它到底在“挖”啥?——数据挖掘算法入门扫盲篇
你天天听“数据挖掘”,可它到底在“挖”啥?——数据挖掘算法入门扫盲篇
86 0
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
8月前
|
机器学习/深度学习 算法 机器人
强化学习:时间差分(TD)(SARSA算法和Q-Learning算法)(看不懂算我输专栏)——手把手教你入门强化学习(六)
本文介绍了时间差分法(TD)中的两种经典算法:SARSA和Q-Learning。二者均为无模型强化学习方法,通过与环境交互估算动作价值函数。SARSA是On-Policy算法,采用ε-greedy策略进行动作选择和评估;而Q-Learning为Off-Policy算法,评估时选取下一状态中估值最大的动作。相比动态规划和蒙特卡洛方法,TD算法结合了自举更新与样本更新的优势,实现边行动边学习。文章通过生动的例子解释了两者的差异,并提供了伪代码帮助理解。
572 2
|
机器学习/深度学习 算法 API
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
机器学习/深度学习 算法 大数据
机器学习入门:梯度下降算法(下)
机器学习入门:梯度下降算法(下)
|
机器学习/深度学习 算法
机器学习入门:梯度下降算法(上)
机器学习入门:梯度下降算法(上)

热门文章

最新文章