惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
云风的 BLOG
云风的 BLOG
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园_首页
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The GitHub Blog
The GitHub Blog
Google DeepMind News
Google DeepMind News
M
MIT News - Artificial intelligence
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
N
News and Events Feed by Topic
Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tailwind CSS Blog
Google DeepMind News
Google DeepMind News
IT之家
IT之家
W
WeLiveSecurity
P
Proofpoint News Feed
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
月光博客
月光博客
Schneier on Security
Schneier on Security
博客园 - 三生石上(FineUI控件)
Application and Cybersecurity Blog
Application and Cybersecurity Blog
腾讯CDC
H
Heimdal Security Blog
Y
Y Combinator Blog
Engineering at Meta
Engineering at Meta
量子位
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
V
Visual Studio Blog
L
LangChain Blog
Last Week in AI
Last Week in AI
The Cloudflare Blog
Hacker News: Ask HN
Hacker News: Ask HN
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
SecWiki News
SecWiki News
Simon Willison's Weblog
Simon Willison's Weblog
Security Latest
Security Latest
A
Arctic Wolf
T
Tenable Blog
I
Intezer
P
Privacy International News Feed
Attack and Defense Labs
Attack and Defense Labs
N
News | PayPal Newsroom
Martin Fowler
Martin Fowler

博客园 - gyhanonline

Function Point in Vbscript Window API in QTP Simulate click event using widows API. Static Constructor A Go Set program A Go Set program About Inherit Code for Inter-process communicate Integrity Level Test for publish blog by word 2007 托管为什么安全 The usage of intellisense in Vs .net 2005 关于singlton的一些问题 我的面试(六) 我的面试(五) 我的面试(四)补充1 我的面试(四) 我的面试(三) 我的面试(二)
我的面试(七)
gyhanonline · 2007-11-02 · via 博客园 - gyhanonline

    昨天参加了公司推荐的onsite第二轮面试,考官出了一道题,没答出最优的方法。今天试了试感觉效率还是很重要的。笨方法和较优方法间的差距在10,000级有1s多到了100,000级竟然有81.296s这样大的差距。真是不敢想象。看来以后真的要多注意效率问题。
   不注意效率的笨方法对于系统来说真是毁灭!
   考题奉上:
两组有序数列,请计算他们不共有数据的个数,例如:
input1:1 1 2 2 3 3 5 6 6
input2:0 1 3 3 3 4
output:5(即0 2 4 5 6一共5个)
两种方法:
1

        static  public int GetSameUniqueNumberCount(List<int> sourceList1,List<int> sourceList2)
        
{
            
int i = 0
            
int j = 0;
            List
<int> resultList = new List<int>();
            
while (i < sourceList1.Count || j < sourceList2.Count)
            
{
                
if (i >= sourceList1.Count)
                
{
                    
if (!resultList.Contains(sourceList2[j])) resultList.Add(sourceList2[j]);
                    j
++;
                }

                
else if (j >= sourceList2.Count)
                
{
                    
if (!resultList.Contains(sourceList1[i])) resultList.Add(sourceList1[i]);
                    i
++;
                }

                
else if (sourceList1[i] < sourceList2[j])
                
{
                    
if (!resultList.Contains(sourceList1[i])) resultList.Add(sourceList1[i]);
                    i
++;
                }
                
                
else if (sourceList1[i] == sourceList2[j])
                
{
                        
while (i < sourceList1.Count - 1)
                        
{
                            
if (sourceList1[i] != sourceList1[++i]) break;
                        }

                        
while (j < sourceList2.Count - 1)
                        
{
                            
if (sourceList2[j] != sourceList2[++j]) break;
                        }

                        
if (i == sourceList1.Count - 1) i++;
                        
if (j == sourceList2.Count - 1) j++;
                }

                
else if (sourceList1[i] > sourceList2[j] )
                
{
                    
if (!resultList.Contains(sourceList2[j])) resultList.Add(sourceList2[j]);
                    j
++;
                }

            }

            
return resultList.Count;
        }

这个方法比较快
2.

        static public int GetSameUniqueNumberCount2(List<int> sourceList1, List<int> sourceList2)
        
{
            List
<int> resultList = new List<int>();
            
for (int i = 0; i < sourceList1.Count; i++)
            
{
                
if (!sourceList2.Contains(sourceList1[i]) &&!resultList.Contains(sourceList1[i]))
                
{
                    resultList.Add(sourceList1[i]);
                }

            }

            
for (int j = 0; j < sourceList2.Count; j++)
            
{
                
if (!sourceList1.Contains(sourceList2[j]) && !resultList.Contains(sourceList2[j]))
                
{
                    resultList.Add(sourceList2[j]);
                }

            }

            
return resultList.Count;
        }

这是最直白的方法,也是给系统带来毁灭的方法100,000级就已经有明显的用户体验下降的感觉了再高一级就肯定认为是死机啦

下边是所有的代码(包括100,000的测试用例)