矩阵原地转置,空间复杂度为O(1)(暂时先保存下来)
来源:互联网 发布:php高级工程师证书 编辑:程序博客网 时间:2024/05/17 20:00
#include<iostream>using namespace std; /* 后继 */int getNext(int i, int m, int n){ return (i%n)*m + i/n;} /* 前驱 */int getPre(int i, int m, int n){ return (i%m)*n + i/m;} /* 处理以下标i为起点的环 */void movedata(int *mtx, int i, int m, int n){ int temp = mtx[i]; // 暂存 int cur = i; // 当前下标 int pre = getPre(cur, m, n); while(pre != i) { mtx[cur] = mtx[pre]; cur = pre; pre = getPre(cur, m, n); } mtx[cur] = temp;} /* 转置,即循环处理所有环 */void transpose(int *mtx, int m, int n){ for(int i=0; i<m*n; ++i) { int next = getNext(i, m, n); while(next > i) // 若存在后继小于i说明重复 next = getNext(next, m, n); if(next == i) // 处理当前环 movedata(mtx, i, m, n); }} /* 输出矩阵 */void print(int *mtx, int m, int n){ for(int i=0; i<m*n; ++i) { if((i+1)%n == 0) cout << mtx[i] << "\n"; else cout << mtx[i] << " "; }} /* 测试 */int main(){ int matrix[4*2] = {1,2,3,4,5,6,7,8}; cout << "Before matrix transposition:" << endl; print(matrix, 4, 2); transpose(matrix, 4, 2); cout << "After matrix transposition:" << endl; print(matrix, 2, 4); return 0;}
0 0
- 矩阵原地转置,空间复杂度为O(1)(暂时先保存下来)
- 矩阵转置,空间复杂度要求为O(1)
- 原地归并算法(空间复杂度为O(1)的归并排序)
- 时间复杂度为O(n),空间复杂度为O(1)
- 矩阵原地转置
- 矩阵原地转置
- 一个时间复杂度为O(n),空间复杂度为O(1)的排序算法
- 排序的时间复杂度为O(n),空间复杂度为O(1)
- 时间复杂度为O(N),空间复杂度为O(1)的排序算法
- 矩阵转置 O(1)空间
- 矩阵转置 O(1)空间
- 变换数组 要求空间复杂度为O(1)
- 反转链表:空间复杂度为O(1)的算法
- 字符串翻转 要求空间复杂度为O(1)
- 实现链表逆序,空间复杂度为O(1)
- 不用额外空间的整数交换以及时间复杂度为O(n)空间复杂度为O(1)的排序算法
- 矩阵的原地转置
- 矩阵原地转置、旋转
- 经典分类算法--决策树笔记
- rtrim函数的一个坑
- 最小生成树(kruskal)
- HDOJ--5053--the Sum of Cube
- Centos7.0安装redis
- 矩阵原地转置,空间复杂度为O(1)(暂时先保存下来)
- hrbust 1748Sort the Array【传递闭包+Floyd】
- maven工程导入指南
- ImageView的背景图片与R.drawable.xx比较
- iOS开发-数组的深拷贝浅拷贝注意点
- the Sum of Cube hd 5053
- hdoj4548美素数
- std::max
- Android高效加载大图、多图解决方案,有效避免程序OOM