• 【LC_Lesson1】--字符串反转练习


    LeetCode算法练习题目一: 给定一个字符串,要求将该字符串反转后输出

    努力学习,天天向上。借助LeetCode的题目,练习编码能力,数据结构,以及C++和Python的编码能力。

    一. 算法实现

    解法一: 首尾互换位置

    (重点:关注到不同方法的时间复杂度,空间复杂度,以及一种评测算法效率的实现方式)

    比较好的方式,首位交换位置

    C++实现方式如下:

     1 # include <iostream>
     2 
     3 using namespace std;
     4 
     5 class Solution{
     6     public:
     7         void reverseString(string str);
     8 };
     9 
    10 void Solution::reverseString(string str)
    11 {
    12     int i;
    13     int j = str.length()-1;
    14     unsigned char temp;
    15     while(i < j)
    16     {
    17         temp = str[i];
    18         str[i] = str[j];
    19         str[j] = temp;
    20         i++;j--;
    21     }
    22     for(i=0;i<str.length();i++)
    23         cout << str[i];
    24     cout << endl;
    25 }
    26 
    27 int main(void)
    28 {
    29     Solution str;
    30     str.reverseString("hello,wwz");
    31     return 0;
    32 }

    结果如下:

             

    python实现方式:

     1 def ReverseSting1(list_string):
     2     length = len(list_string);
     3     i = 0;
     4     j = length - 1;
     5     while i < j:
     6         temp = list_string[j];
     7         list_string[j] = list_string[i];
     8         list_string[i] = temp;
     9         i += 1;
    10         j -= 1;
    11     print(list_string)
    12 
    13 
    14 string = 'abcdefghijklmn'
    15 list_string = list(string)
    16 ReverseSting1(list_string)

    结果如下:

            

     注意:python中的字符串是只读属性,因此为了方便修改,将其转换成列表是一个不错的选择。

    解法二: 暴力执行

    最简单的方式,就是暴力执行,将整个数据包遍历一遍。如果有n个数据,因此需要执行n次,时间复杂度就是很直观的O(n),代码就不写了,比较简答 

    二.  效率分析

    首尾交换

    假如有n个元素,由于首尾同时遍历扫描,因此将会执行n/2次运算,可算作时间复杂度为O(n/2),实际上没有这种说法,对于同等量级的运算更多都会表示为O(n)

    暴力执行

    前文已经描述,方案简单,逻辑简单,就是只管的O(n)

    对比分析预测

    针对首尾交换的n/2次运算(时间为T1),以及暴力法的n次运算(时间为T2),按理说执行时间应该几乎一致,也就是T1 = 1/2 * T2 ,但是由于首尾交换每次执行运算量稍多一些,所以时间应为T1 > 1/2 * T2。

    下面我们实际上机验证,再次也给出一种测试算法效率的方法:

    (未完待续)

  • 相关阅读:
    SQLServer和Access数据传输简单总结
    Session 详解
    SQL日志文件过大问题的解决方法
    如何删除表中的重复记录?
    HDOJ 3711 Binary Number
    HDOJ 2022
    活动选择问题
    浮点数的比较
    HDOJ 2037
    找最长递增子数列
  • 原文地址:https://www.cnblogs.com/szhb-5251/p/11732622.html
Copyright © 2020-2023  润新知