数据结构与算法(C#)入门 --- 串和数组

前言

本章内容包含串与数组,都是平时工作中常用的内容。因此串与数组的介绍会很简单,重点在于 LeetCode 的练习。

串的定义

在应用程序中使用最频繁的类型是字符串。字符串简称串。

串的存储

由于串中的字符都是连续存储的,而在 C#中串具有恒定不变的特性,即字符串一经创建,就不能将其变长、变短或者改变其中任何的字符。

数组

数组是一种常用的数据结构,可以看作是线性表的推广。数组作为一种数据结构,其特点是结构中的数据元素可以是具有某种结构的数据。
比如二维数组的元素就是一维数组。

数组的存储

在内存中开辟一块连续的、大小相同的空间,用来存储数据。通常采用顺序存储结构来存储数组中的数据元素。

练习题1-Robot Return to Origin

需求:有一个机器人初始位置是 (0,0),根据字符串 S 移动。S 只包含 L(左移)R(右移)U(上移)D(下移)。假设每次移动的长度相同,判断机器人执行完S后是否能够回到初始位置。

思路:假设执行 L 时 +1,R 时 - 1. U 时 + 1,D 时 - 1。只要判断机器人在水平方向 LR,垂直方向上 UD 和是否为0.

关键代码:

var vertiVal = 0;
var horizVal = 0;

foreach (var c in moves)
{
    if (c == 'U' || c == 'D')
        {
            vertiVal = c == 'U' ? ++vertiVal : --vertiVal;
        }
        else if (c == 'L' || c == 'R')
        {
            horizVal = c == 'L' ? ++horizVal : --horizVal;
        }
}

return (vertiVal == 0 && horizVal == 0);

练习题2-Reverse String

需求:字符串 S 反转。不能创建额外的数组,只能对 S 进行修改。

思路:创建临时变量 tmp,然后 i 处与 S.Length - 1 - i 处值交换

关键代码:

if (null == s || s.Length == 0)
{
    return;
}

int end = s.Length - 1;
for (int i = 0; i < end; i++, end--)
{
    var tmp = s[i];
    s[i] = s[end];
    s[end] = tmp;
}

练习题3-Reverse String

需求: 数组重新排序,偶数在前(顺序随意),奇数在后(顺序随意)。

思路:

设置两个节点: first 与 end . first 是从头到尾, end 是从尾到头.假设数组是 A

如果 A[first] 是偶数, 说明不需要改变, 此时 first++

如果 A[end]是奇数,说明不需要改变, 此时 end--

关键代码:

var end = A.Length - 1;
for (int i = 0; i < end; i++)
{
    if (A[i] % 2 == 0)
    {
        continue;
    }
    else if (A[i] % 2 == 1)
    {
          while (A[end] % 2 == 1 && end > i)
          {
                end--;
           }

           var tmp = A[i];
           A[i] = A[end];
           A[end] = tmp;
           end--;
     }
}
return A;

原文地址:https://www.cnblogs.com/huang1991/p/10896270.html

时间: 2024-10-29 19:46:27

数据结构与算法(C#)入门 --- 串和数组的相关文章

数据结构与算法JavaScript (四) 串(BF)

串是由零个或多个字符组成的有限序列,又叫做字符串 串的逻辑结构和线性表很相似的,不同的是串针对是是字符集,所以在操作上与线性表还是有很大区别的.线性表更关注的是单个元素的操作CURD,串则是关注查找子串的位置,替换等操作. 当然不同的高级语言对串的基本操作都有不同的定义方法,但是总的来说操作的本质都是相似的.比如javascrript查找就是indexOf, 去空白就是trim,转化大小写toLowerCase/toUpperCase等等 这里主要讨论下字符串模式匹配的几种经典的算法:BF.BM

数据结构与算法JavaScript (五) 串(经典KMP算法)

数据结构与算法JavaScript (五) 串(经典KMP算法) KMP算法和BM算法 KMP是前缀匹配和BM后缀匹配的经典算法,看得出来前缀匹配和后缀匹配的区别就仅仅在于比较的顺序不同 前缀匹配是指:模式串和母串的比较从左到右,模式串的移动也是从 左到右 后缀匹配是指:模式串和母串的的比较从右到左,模式串的移动从左到右. 通过上一章显而易见BF算法也是属于前缀的算法,不过就非常霸蛮的逐个匹配的效率自然不用提了O(mn),网上蛋疼的KMP是讲解很多,基本都是走的高大上路线看的你也是一头雾水,我试

《数据结构与算法之美》 &lt;03&gt;数组:为什么很多编程语言中数组都从0开始编号?

提到数组,我想你肯定不陌生,甚至还会自信地说,它很简单啊. 是的,在每一种编程语言中,基本都会有数组这种数据类型.不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构.尽管数组看起来非常基础.简单,但是我估计很多人都并没有理解这个基础数据结构的精髓. 在大部分编程语言中,数组都是从 0 开始编号的,但你是否下意识地想过,为什么数组要从 0 开始编号,而不是从 1 开始呢? 从 1 开始不是更符合人类的思维习惯吗? 你可以带着这个问题来学习接下来的内容. 如何实现随机访问? 什么是数

各种数据结构与算法知识入门经典(不断更新)

自荐者和推荐者请留言 基本算法 贪心算法:贪心算法 作者:独酌逸醉 贪心算法精讲 作者:3522021224 递归和分治:递归与分治策略 作者:zhoudaxia 图论 图的遍历(DFS和BFS):  图的遍历 作者:jefferent 最小生成树(Prim算法和Kruskal算法): 贪心算法--最小生成树 作者:独酌逸醉 Dijkstra算法: 最短路径之Dijkstra算法详细讲解 作者:愚人有节 拓扑排序:拓扑排序作者: midgard 如何去理解 拓扑排序算法 作者:张善友 关键路径:

数据结构与算法基础之指针和数组

指针和数组: 指针和一维数组: 数组名: 一维数组名是个指针常量 它的值不能被改变 它存放的是一维数组里第一个元素的地址 一维数组名指向的是数组的下标为0的第一个元素. 下标和指针的关系: 1 a[i]<<==>>*(a+i)<<==>>*(i+a)<<==>>i[a] //符号表示等价于 1 #include<stdio.h> 2 int mian(){ 3 int a[5]; 4 printf("%p,%p&

算法入门《数据结构与算法图解》+《我的第一本算法书》+《学习JavaScript数据结构与算法第3版》

最近几年学前端的人会越来越多,再加上前端的范围越来越广,从前端发展为全栈,数据结构和算法的功底要求势必将越来越高. <数据结构与算法图解>电子书及代码是数据结构与算法的入门指南,不局限于某种特定语言,略过复杂的数学公式,用通俗易懂的方式针对编程初学者介绍数据结构与算法的基本概念,培养编程逻辑.主要内容包括:为什么要了解数据结构与算法,大O表示法及其代码优化利用,栈.队列等的合理使用,等等. <算法图解>电子书非常的体贴,看起来也很快,用图来解释算法是非常好的想法,可作为学习数据结构

重读《学习JavaScript数据结构与算法-第三版》- 第3章 数组(一)

定场诗 大将生来胆气豪,腰横秋水雁翎刀. 风吹鼍鼓山河动,电闪旌旗日月高. 天上麒麟原有种,穴中蝼蚁岂能逃. 太平待诏归来日,朕与先生解战袍. 此处应该有掌声... 前言 读<学习JavaScript数据结构与算法>- 第3章 数组,本节将为各位小伙伴分享数组的相关知识:概念.创建方式.常见方法以及ES6数组的新功能. 数组 数组是最简单的内存数据结构,用于存储一系列同一种数据类型的值. 注:虽然数组支持存储不同类型的值,但建议遵守最佳实践. 一.数组基础 创建和初始化数组 new Array

与Javascript相关的数据结构和算法

著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:豪情链接:http://www.zhihu.com/question/36882354/answer/69416260来源:知乎 建议先打好基础,了解js语言的特性或玩法,然后再来玩算法,个人感觉才能四两拨千斤,算法这种东西,是高级抽象的东西,简单说:是熟悉计算机语言解决日常需求的前提下,熟练的选择一种高效的做事方式,先了解如何将日常的需求或人类的自然语言转换为计算机语言,然后在进一步的确定算法在整个代码开发中所扮演的角色

数据结构和算法之概述

1 什么是数据结构和算法? 1.1 数据结构 对内存或磁盘上的数据的一种安排,也就是数据的组织形式.基本的数据结构包括数组.链表.栈.队列.树.哈希表.图.堆等等. 1.2 算法 是对数据结构中的数据进行处理的方式或是过程,广义上讲,就是解决问题的方法. 2 数据结构和算法的关系 数据结构是为算法服务的,很多算法都依赖于特定的数据结构,但是不是全部算法,算法当然可以和数据结构没有关系. 3 学习数据结构和算法有什么好处? 正确的选择数据结构和算法,可以使得程序更加健壮,运行效率大大提高,因此,数