算法题C#
几个大公司(IBM、MicroSoft and so on)面试经典数据结构与算法题C#解答
1.链表反转
我想到了两种比较简单的方法
第一种是需要开一个新的链表,将原链表的元素从后到前的插入到新链表中(也就是原链表第一个元素被插入成新链表的最后一个元素)。
第二种是不需要开新的链表,而是逐步反转原链表中元素的指向,例如:
原链表是 1->2->3->4->null 被 逐步修改为 ①2->1->null、3->4->null ②3->2->1->null、4->null ③4->3->2->1->null
最后再将head指向4。

1 namespace 链表反转
2 {
3 class Node
4 {
5 public int Num { get; set; }
6 public Node Next { get; set; }
7 }
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 NodeList list = new NodeList();
13 list.Add(1);
14 list.Add(2);
15 list.Add(3);
16 list.Add(4);
17 list.Add(5);
18 list.Reverse1();
19 list.Print();
20
21 NodeList list1 = list.Reverse();
22 list1.Print();
23
24 Console.ReadKey();
25 }
26 }
27
28 class NodeList
29 {
30 public Node Head { get; set; }
31 public void Add(int num)
32 {
33 if (Head == null)
34 {
35 Head = new Node();
36 Head.Next = new Node() { Num = num };
37 }
38 else
39 {
40 Node tn = Head;
41 while (tn.Next != null)
42 {
43 tn = tn.Next;
44 }
45 tn.Next = new Node() { Num = num };
46 }
47 }
48
49 public void Print()
50 {
51 Node tn = Head;
52 while(tn.Next!=null)
53 {
54 tn = tn.Next;
55 Console.WriteLine(tn.Num);
56 }
57 }
58
59 //需要开新链表的反转
60 public NodeList Reverse()
61 {
62 NodeList list = new NodeList();
63 Node tn = Head;
64 Node newTn = null;
65 while (tn.Next != null)
66 {
67 tn = tn.Next;
68 if (newTn == null)
69 {
70 newTn = new Node() { Num = tn.Num };
71 }
72 else
73 {
74 newTn = new Node() { Num = tn.Num,Next=newTn };
75 }
76 }
77 list.Head = new Node();
78 list.Head.Next = newTn;
79 return list;
80 }
81
82 //不需要开新链表的反转
83 public void Reverse1()
84 {
85 Node n1 = Head.Next;
86 Node n2 = Head.Next.Next;
87 //第一个节点也就是反转后的最后一个节点,Next要指向null
88 Node first = Head.Next;
89 first.Next = null;
90 //如果链表为空或者链表只有一个元素那就无需调整
91 if (n2 == null || n1 ==null)
92 {
93 return;
94 }
95 //先用Head指向n2的下一个元素,再将n2的Next指向n1,最后将n1和n2向右移动
96 while (n2.Next != null)
97 {
98 Head.Next = n2.Next;
99 n2.Next = n1;
100 n1 = n2;
101 n2 = Head.Next;
102 }
103 //最后要将头结点指向链表反转前的最后一个元素
104 Head.Next = n2;
105 //因为判断条件只调整到最后一个元素的前一个元素,所以要调整最后一个元素的Next指向
106 n2.Next = n1;
107 }
108 }

2.字符串查找第一个不重复的字母
基本原理:第一遍遍历字符串时,用hash表存储每个字符出现的次数,第二遍遍历字符串时,筛选出第一个hash中对应保存的出现次数为1的字符。

1 namespace 字符串查找第一个不重复的字母
2 {
3 class Program
4 {
5 static Hashtable hash = new Hashtable();
6 static void Main(string[] args)
7 {
8 string s = "asfgasjfoiwoeqkwzxc";
9 Count(s);
10 Console.WriteLine(Search(s));
11 Console.ReadKey();
12 }
13
14 static void Count(string s)
15 {
16 for (int i = 0; i < s.Length; i++)
17 {
18 if (hash.Contains(s[i]))
19 {
20 hash[s[i]] = (int)hash[s[i]]+1;
21 }
22 else
23 {
24 hash[s[i]] = 1;
25 }
26 }
27 }
28
29 static char Search(string s)
30 {
31 for (int i = 0; i < s.Length; i++)
32 {
33 if ((int)hash[s[i]] == 1)
34 {
35 return s[i];
36 }
37 }
38 return '#';
39 }
40 }
41 }

随笔分类 - 数据结构及算法
算法题C#的更多相关文章
- 一道java算法题分析
最近在面试中遇到这样的一道算法题: 求100!的结果的各位数之和为多少? 如:5!=5*4*3*2*1=120,那么他们的和为1+2+0=3这道题不算难,不过倒是注意的细节也有 ...
- FCC上的初级算法题
核心提示:FCC的算法题一共16道.跟之前简单到令人发指的基础题目相比,难度是上了一个台阶.主要涉及初步的字符串,数组等运算.仍然属于基础的基础,官方网站给出的建议完成时间为50小时,超出了之前所有非 ...
- 解决一道leetcode算法题的曲折过程及引发的思考
写在前面 本题实际解题过程是 从 40秒 --> 24秒 -->1.5秒 --> 715ms --> 320ms --> 48ms --> 36ms --> ...
- js 中的算法题,那些经常看到的
js中遇到的算法题不是很多,可以说基本遇不到.但面试的时候,尤其是一些大公司,总是会出这样那样的算法题,考察一个程序员的逻辑思维能力.如下: 1.回文. 回文是指把相同的词汇或句子,在下文中调换位置或 ...
- JavaScript算法题之–随机数的生成
JavaScript算法题之–随机数的生成 需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现. 先来生成一个有序的数组: 1 var arr = [], 2 ...
- 简单的算法题, Find Minimum in Rotated Sorted Array 的Python实现。
简单的算法题, Find Minimum in Rotated Sorted Array 的Python实现. 题目: Suppose a sorted array is rotated at som ...
- 经典算法题每日演练——第十七题 Dijkstra算法
原文:经典算法题每日演练--第十七题 Dijkstra算法 或许在生活中,经常会碰到针对某一个问题,在众多的限制条件下,如何去寻找一个最优解?可能大家想到了很多诸如“线性规划”,“动态规划” 这些经典 ...
- 经典算法题每日演练——第十六题 Kruskal算法
原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0, ...
- 经典算法题每日演练——第十四题 Prim算法
原文:经典算法题每日演练--第十四题 Prim算法 图论在数据结构中是非常有趣而复杂的,作为web码农的我,在实际开发中一直没有找到它的使用场景,不像树那样的频繁使用,不过还是准备 仔细的把图论全部过 ...
- 经典算法题每日演练——第十一题 Bitmap算法
原文:经典算法题每日演练--第十一题 Bitmap算法 在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美, 但是在特定的场 ...
随机推荐
- html/css获得第一章
1.基本教程来学习 大概3天课余时间阅读下面的两个教程. HTML文字教程 CSS文字教程 2.练习 看完教程后.做第一练习时,总结例如以下: 1)div居中 须要设置属性:margin-left:a ...
- Linking pronunciation in English
1.constant+vowel stand up give up get up 2.vowel+vowel 2.1 i:/i/ei/ai/oi [j] stay up carry it 2.2 u: ...
- HDU 4896 Minimal Spanning Tree(矩阵高速功率)
意甲冠军: 给你一幅这样子生成的图,求最小生成树的边权和. 思路:对于i >= 6的点连回去的5条边,打表知907^53 mod 2333333 = 1,所以x的循环节长度为54,所以9个点为一 ...
- Swift学习 --- 2.3和字符串
1.创建一个空字符串,并通过推理的字符串是空的 <span style="font-size:18px;"> var str = "" var st ...
- 佛祖保佑,从来没有Bug
<span style="font-size:14px;">// _ooOoo_ // o8888888o // 88" . "88 // (| - ...
- html 块状元素 行内元素 内联元素
块状(Block)类型的元素的width默认为100%,而行内(Inline)类型的元素则是根据自身的内容及子元素来决定宽度. 块元素(block element) address - 地址 bloc ...
- WinJS Clipboard
//剪贴板 方法1 window.uexClipboard = { copy: null, getContent: null, cbGetContent: null }; uexClipboard.c ...
- zoj-3795-Grouping-tarjan确定最长的公路收缩
使用tarjan缩合点. 然后,dfs寻找最长的公路. 水体. . . #include<stdio.h> #include<string.h> #include<alg ...
- 关于TCP/IP协议栈(转)
1. TCP/IP协议栈 与OSI参考模型不同,TCP/IP协议栈共有4层,其中网络接口层对应OSI中的物理层和数据链路层,应用层对应OSI中的应用层.表示层和会话层. 在网络接口层的主要协议有:AR ...
- ER模型
一.什么是ER模型 实体-联系图(Entity-RelationDiagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段,形成一个独立于机器.独立于DBMS的ER图模型.通常将它简称为ER ...