算法思想之三步翻转法

简介: 算法思想之三步翻转法

常见题目类型:

先看两道相同类型题目。

image.png


这两道题的相同之处在于都是变化字符串的顺序,但其中某些部分按原来位置不变

解题思路:

按照旋转数组进行解答。

首先将后k个逆置,再将前n-k个逆置,最后整体逆置。即可得到答案。三步逆置也就体现了算法的核心思维,也就是三步翻转法。

注意三步翻转法,无论是先整体逆置还是后整体逆置,效果是一样的,都翻转了两次

算法实现:

上述需要创建一个逆置函数,便于调用。只需要给出逆置的范围,左下标和右下标。

注意左下标和右下标的值,容易出错

逆置函数的实现,在于左右下标的互换。

//旋转数组
void reverse(int *arr,int left,int right)
{
while (left <= right)
  {
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
  }
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 0;
scanf("%d", &k);
reverse(arr,10-k,9);
reverse(arr,0,10-k-1 );
reverse(arr,0,9 );//三步翻转
for (int i=0;i<10;i++)
  {
printf("%d ", arr[i]);
  }
return 0;
}

#include<string.h>
//倒置单词
void reverse(char* arr,int left,int right)
{
while (left <= right)
  {
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
  }
}


int main()
{
char arr[100] = { 0 };//时刻要注意初始化
gets(arr);
int len = strlen(arr);//C语言计算字符串的长度用strlen函数
//printf("%d", len);
int left = 0;
int right = left;
reverse(arr, 0, len - 1);
while (arr[right]!='\0')
  {
while (arr[right] == ' ')
    {
reverse(arr, left, right-1);
left = right + 1;
right = left;
    }
right++;
  }
reverse(arr, left, len - 1);
for (int i=0;i<len;i++)
  {
printf("%c", arr[i]);
  }
return 0;
}
相关文章
|
6月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 226. 翻转二叉树 算法解析
☆打卡算法☆LeetCode 226. 翻转二叉树 算法解析
|
6月前
|
存储 JavaScript 算法
TypeScript算法专题 - blog4 - 单链表节点的两-两翻转(两两一组逆序)
TypeScript算法专题 - blog4 - 单链表节点的两-两翻转(两两一组逆序)
51 0
|
存储 算法 前端开发
前端算法-翻转二叉树
前端算法-翻转二叉树
|
5月前
|
存储 机器学习/深度学习 算法
python 五种算法转置后翻转、层次旋转、递归分块、一次性旋转、环状替换 实现旋转图像【力扣题48】
python 五种算法转置后翻转、层次旋转、递归分块、一次性旋转、环状替换 实现旋转图像【力扣题48】
|
5月前
|
算法 Java C语言
【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)
【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)
33 1
|
5月前
|
算法
数据结构和算法学习记录——习题-翻转链表(不带表头结点逆置算法、带表头结点的链表逆置算法)
数据结构和算法学习记录——习题-翻转链表(不带表头结点逆置算法、带表头结点的链表逆置算法)
33 0
|
6月前
|
算法 测试技术 C#
【滑动窗口】【差分数组】C++算法:K 连续位的最小翻转次数
【滑动窗口】【差分数组】C++算法:K 连续位的最小翻转次数
|
6月前
|
存储 算法
算法题解-翻转二叉树
算法题解-翻转二叉树
|
6月前
|
算法 程序员
【算法训练-二叉树 四】【对称与翻转】对称二叉树、翻转二叉树
【算法训练-二叉树 四】【对称与翻转】对称二叉树、翻转二叉树
50 0
|
算法
代码随想录算法训练营第十四天 | LeetCode 102. 二叉树的层序遍历、LeetCode 226. 翻转二叉树、LeetCode 101. 对称二叉树
代码随想录算法训练营第十四天 | LeetCode 102. 二叉树的层序遍历、LeetCode 226. 翻转二叉树、LeetCode 101. 对称二叉树
55 0