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

推荐订阅源

MongoDB | Blog
MongoDB | Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
小众软件
小众软件
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - Franky
博客园 - 聂微东
V
Visual Studio Blog
I
InfoQ
罗磊的独立博客
Security Latest
Security Latest
G
Google Developers Blog
博客园_首页
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
D
DataBreaches.Net
PCI Perspectives
PCI Perspectives
Forbes - Security
Forbes - Security
P
Proofpoint News Feed
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Know Your Adversary
Know Your Adversary
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Recent Commits to openclaw:main
Recent Commits to openclaw:main
The Cloudflare Blog
AWS News Blog
AWS News Blog
Latest news
Latest news
T
Tailwind CSS Blog
P
Palo Alto Networks Blog
Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
Cyberwarzone
Cyberwarzone
T
The Exploit Database - CXSecurity.com
WordPress大学
WordPress大学
Recorded Future
Recorded Future
A
Arctic Wolf
V
Vulnerabilities – Threatpost
Security Archives - TechRepublic
Security Archives - TechRepublic
宝玉的分享
宝玉的分享
人人都是产品经理
人人都是产品经理
月光博客
月光博客
有赞技术团队
有赞技术团队
P
Privacy & Cybersecurity Law Blog
Scott Helme
Scott Helme
美团技术团队
Hacker News - Newest:
Hacker News - Newest: "LLM"
Jina AI
Jina AI
N
News and Events Feed by Topic
Attack and Defense Labs
Attack and Defense Labs

博客园 - 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的测试用例)