算法题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)的常量时间,多么的简洁优美, 但是在特定的场 ...
随机推荐
- [LeetCode55]Jump Game
题目: Given an array of non-negative integers, you are initially positioned at the first index of the ...
- 关于csrss.exe和winlogon.exe进程多、占用CPU高的解决办法
原地址 http://blog.sina.com.cn/s/blog_912e77480101nuif.html 最近VPS的CPU一直处在100%左右,后台管理上去经常打不开,后来发现上远程都要 ...
- 构建安全的Xml Web Service系列之SSL篇
原文:构建安全的Xml Web Service系列之SSL篇 首先介绍一下SSL, SSL 的英文全称是 "Secure Sockets Layer" ,中文名为 "安全 ...
- linux下一个Oracle11g RAC建立(五岁以下儿童)
linux下一个Oracle11g RAC建立(五岁以下儿童) 四.建立主机之间的信任关系(node1.node2) 建立节点之间oracle .grid 用户之间的信任(通过ssh 建立公钥和私钥) ...
- c# winform 引用sqlite.dll 运行报错解决方法
错误信息 : 未能加载文件或程序集“System.Data.SQLite, Version=1.0.81.0, Culture=neutral, PublicKeyToken=db937bc2d44 ...
- 【Andrioid】在Gradle编译时生成一个不同的版本号,动态设置应用程序标题,应用程序图标,更换常数
写项目的时候常常会遇到下面的情况: 1.须要生成測试版本号和正式版本号的apk 2.測试版本号和正式版本号的URL是不一样的 3.測试版本号和正式版本号的包名须要不一致,这样才干安装到同一部手机上面. ...
- IIS7启用静态压缩
IIS7启用压缩的操作如下图: 默认情况下IIS7是启用GZip压缩的,但是有时候我们会发现谁然启用了压缩但是一些js和css文件仍然没有被压缩,这个时候需要修改一下IIS 的配置文件: 在C:\Wi ...
- 使用JMX实现的内存监控(转)
public final class MemoryWarningSystem { private static MemoryWarningSystem m_instance = null; /** * ...
- 更改Calendar背景图(使用系统映像选择器)
最近提出的申请,主接口是一个历,网上有很多第三方的日历控件,有使用ImageView实现,有使用GridView实现,它的优点是控制的灵活性. 而我选择使用本机CalendarView,关于这个控件, ...
- 他们控制的定义-DragButton
一个.叙述性说明 可拖动Button 两.无图无真相 这是用在实际工程效果图.和demo不太一样. 三.源代码 https://github.com/mentor811/Demo_DragButton ...