把字符串中*全部移到字符串的头部---要求时间复杂度和空间复杂度
来源:互联网 发布:安卓中电量优化怎么做 编辑:程序博客网 时间:2024/06/02 04:15
#include <stdio.h>//把字符串中*全部移到字符串的头部void moveCharToHead(char *str){if(str == NULL)return ;char *pString = str;char *tmp = NULL;while(*pString != '\0'){if(*pString == '*'){tmp = pString;while(tmp > str){*tmp = *(tmp - 1);tmp --;}*tmp = '*';str ++;}pString ++;}}int main(){char str[] = "*th*an*k* yo*u *v*er*y* m**uc*h !";int len = sizeof(str) / sizeof(char);moveCharToHead(str);printf("%s\n",str);}
数组中,数值移动问题.
如下:
int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至
数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)
#include <stdio.h>int Func(int* A, int nSize) { int tag = 0,nCount = 0; int *p = NULL,*tmp = NULL; if((A == NULL) || (nSize <= 0)) { return -1; } while(nCount < nSize) { if(A[ nCount ] == 0) { tag = 1; break; } else { nCount ++; } } if(tag == 1) { p = A + nCount; while(p < A + nSize) { if(*p == 0) { tmp = p; tag = *p; while(tmp < A + nSize) { *tmp = *(tmp + 1); tmp ++; } nSize --; *(A + nSize) = tag; } else { p ++; } } return nCount; } else { printf("Donnot find the zero.\n"); return -1; } } int main(){int A[] = {0,8,0,7,6,5,0,3,2,0,1,0,8,0,9};int i,len = sizeof(A) / sizeof(int);Func(A,len);for(i = 0;i < len;i ++){printf("%3d",A[i]);}printf("\n");}
好的算法:
void DeleteChars(char* pStrSource, const char* pStrDelete) { if(NULL == pStrSource || NULL == pStrDelete) return; const unsigned int nTableSize = 256; int hashTable[nTableSize]; memset(hashTable, 0, sizeof(hashTable)); const char* pTemp = pStrDelete; while ('\0' != *pTemp) { hashTable[*pTemp] = 1; ++ pTemp; } char* pSlow = pStrSource; char* pFast = pStrSource; while ('\0' != *pFast) { if(1 != hashTable[*pFast]) { *pSlow = *pFast; ++ pSlow; } ++pFast; } *pSlow = '\0'; }
- 把字符串中*全部移到字符串的头部---要求时间复杂度和空间复杂度
- 字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
- 字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
- 字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
- 字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小 .
- 字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
- 字符串移动(字符串为’*’号和26个字母的任意组合, 把’*’号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
- 人人都来写算法 之 移除字符串中重复的字符,时间复杂度要求O(n),空间复杂度O(1)
- [练习题] 将数组中的负数全部移到非负数的前面,要求O(n)时间复杂度
- 【每日一题】查找一个字符串中第一个只出现两次的字符。要求时间复杂度为O(N),空间复杂度为O(1)
- 【百度】写一个字符串逆序的程序,时间复杂度和空间复杂度最低,效率越高越好
- 【百度】写一个字符串逆序的程序,时间复杂度和空间复杂度最低,效率越高越好
- 数据结构中时间复杂度和空间复杂度的理解
- 时间的复杂度和空间的复杂度
- 查找一个字符串中第一个只出现两次的字符,要求时间复杂度为O(N)。-替换字符串中的空格为$$$。要求时间复杂度为O(N)
- 时间复杂度和空间复杂度的概念
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- Linux 下 启动 Oracle
- 【总结】邻接矩阵 图的基本操作
- Jquery 图像渐变
- Webdings的字体对照表
- Ubuntu安装配置记4(TOMCAT6 ,APACHE2整合,动静态内容分开处理)
- 把字符串中*全部移到字符串的头部---要求时间复杂度和空间复杂度
- 终端服务器超出了最大允许连接数
- 做一个优秀的人
- Linux下getsockopt/setsockopt 函数说明
- Liunx下查看服务器性能
- android 如何调用talk程序,集成到自己写的应用中
- 2349 Arctic Network prim最小生成树 基础
- 向下转型的含义
- dbutils模糊查询