首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

微软中国经典算法题 求解(上周结帖)

2013-01-07 
微软中国经典算法题 求解(下周结帖)面试时碰到的算法题 如下:1:有一个随机字符串BPMQKLNHZCY...给定一个

微软中国经典算法题 求解(下周结帖)
面试时碰到的算法题 如下:
1:有一个随机字符串"BPMQKLNHZCY..."给定一个从A到Z之间的任意随机字符
  如"N", 然后对随机字符串进行排序 从A到Z,比"N"小的放在"N"的左边 比 "N"大的放在"N"的右边,要求在排序的过程中不改变字符的相对位置,如示例字符串的"H"和"C" 在"N"后,在排序换到"N"前面时,也应保持"C"在"H"后的相对位置。

2:字符串 "{[(10+3)*18-24/8]*(48+37)}/3", 实现一个算法,求字符串算式的结果

3:{"peolpe":[
        {"firstName":"Brett","lastName":"Mclaughlin","email":"aaa"},
        {"firstName":"Jhon","lastName":"Hunter","email":"bbb"},
        {"firstName":"Jason","lastName":"Harold","email":"ccc"},


     ]}

请实现一个算法,将上述json格式的数据填充到下面指定类的实例中
Public Class People{
Public String FirstName;
Public String LastName;
Public String Email;
}
[解决办法]
mark
[解决办法]

string s = @"{""people"":[
        {""firstName"":""Brett"",""lastName"":""Mclaughlin"",""email"":""aaa""},
        {""firstName"":""Jhon"",""lastName"":""Hunter"",""email"":""bbb""},
        {""firstName"":""Jason"",""lastName"":""Harold"",""email"":""ccc""},]}";
MatchCollection matches = Regex.Matches(s, @"(?is)(?<={""people"":\[.*?){""firstName"":""(?<firstName>[^,]+)"",""lastName"":""(?<lastName>[^,]+)"",""email"":""(?<email>[^,]+)""},(?=.*?\]})");
List<People> peopleList = new List<People>();
foreach (Match match in matches)
{
People people = new People();
people.FirstName = match.Groups["firstName"].Value;
people.LastName = match.Groups["lastName"].Value;
people.Email = match.Groups["email"].Value;
peopleList.Add(people);
}
foreach (People people in peopleList)
Response.Write(string.Format("FirstName:{0}----LastName:{1}----Email:{2}<br/>", people.FirstName, people.LastName, people.Email));

[解决办法]
问题1就是快速排序的第一步。
问题2考查你堆栈和逆波兰式。
问题3不知道是让你自己实现算法还是用现成的,很尴尬的题目。

感觉不是微软的,像三流作坊的面试题,lz如实招来。
[解决办法]
这题目还不如那个贩卖码奴的“蚊子创新”呢。与其半年都在研究这些面试题,还不如正儿八经修炼内功,你说呢。
[解决办法]
这是哪家的面试题啊?

第二题不知道你是要结果还是要过程,要结果的话
   string str = "{[(10+3)*18-24/8]*(48+37)}/3";
            str = Regex.Replace(Regex.Replace(str, @"\[
[解决办法]
{", "("), @"\]
[解决办法]
}", ")");
            object s = new DataTable().Compute(str, "");
          
要过程那就看一下逆波兰表达式,自己慢慢写吧。


第三题用正则或json.net都可以
[解决办法]
这题很经典,也很考量功底。
[解决办法]
引用:

问题1就是快速排序的第一步。
问题2考查你堆栈和逆波兰式。
问题3不知道是让你自己实现算法还是用现成的,很尴尬的题目。

感觉不是微软的,像三流作坊的面试题,lz如实招来。


楼主不是说了是微软中国吗?
我怎么感觉你的每一句话中都带有蔑视别人的倾向?来,说说你在哪家公司,说出来吓吓我!
[解决办法]

public string test(string str_text, string str_index)
        {
            char[] arr = str_text.ToUpper().ToCharArray();
            int index = Convert.ToChar(str_index.ToUpper());
            string max = "";
            string min = "";
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i] > index)
                {
                    max += arr[i].ToString();
                }
                if (arr[i] < index)
                {
                    min += arr[i].ToString();
                }
            }
            return max + str_index.ToUpper() + min;
        }


第一题吧...这是我的实现...应该没问题吧0 0..

第二题没听懂(基础比较差)...

第三题3楼已经给出答案了...正则匹配每一行...然后每行的对应的group[index/key].value封装成对象
[解决办法]

public string test(string str_text, string str_index)
        {
            char[] arr = str_text.ToUpper().ToCharArray();
            
            int index = Convert.ToChar(str_index.ToUpper());

            var big = arr.Where(x => x > index).Concat(str_index.ToUpper()).Concat(arr.Where(y => y < index)).ToList();
            StringBuilder sb = new StringBuilder("");
            foreach (char temp in big)
            {
                sb.Append(temp.ToString());
            }


            return sb.ToString();

}



最近学习linq...这样写是不是优雅多了0 0
[解决办法]
微软中国经典算法题 求解(上周结帖)
[解决办法]
引用:
引用:引用:问题1就是快速排序的第一步。
问题2考查你堆栈和逆波兰式。
问题3不知道是让你自己实现算法还是用现成的,很尴尬的题目。

感觉不是微软的,像三流作坊的面试题,lz如实招来。

楼主不是说了是微软中国吗?
我怎么感觉你的每一句话中都带有蔑视别人的倾向?来,说说你在哪家公司,说出来吓吓……

嗯,是的。 对了,你也在上海吗?
[解决办法]
第二题,我没用逆波兰表达式,只是面向对象了下,写得不好,还请见量
附件
[解决办法]
第一题:
            string str = "MNJDOIkjaldfDVIUAASKFDFDFsdfsdegfdfgh";

            StringBuilder sb1 = new StringBuilder();

            StringBuilder sb2 = new StringBuilder();

            foreach (char c in str)
            {
                if ((int)c < (int)'N')
                {
                    sb1.Append(c);
                }
                else
                {
                    sb2.Append(c);
                }
            }


            str = sb1.ToString() + 'N' + sb2.ToString();

[解决办法]
  问题1就是快速排序的第一步。
  问题2考查你堆栈和逆波兰式。
五楼已回答。
  问题3
三楼已回答。
问题总结,基础但有道理。
 

 

热点排行