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

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
小众软件
小众软件
The Register - Security
The Register - Security
量子位
博客园_首页
T
The Blog of Author Tim Ferriss
T
Threat Research - Cisco Blogs
G
Google Developers Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
News and Events Feed by Topic
S
Security Affairs
O
OpenAI News
Google DeepMind News
Google DeepMind News
Webroot Blog
Webroot Blog
The Cloudflare Blog
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
IT之家
IT之家
Recent Commits to openclaw:main
Recent Commits to openclaw:main
V2EX - 技术
V2EX - 技术
S
Secure Thoughts
D
Docker
Cloudbric
Cloudbric
Vercel News
Vercel News
MongoDB | Blog
MongoDB | Blog
T
Troy Hunt's Blog
Blog — PlanetScale
Blog — PlanetScale
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
News and Events Feed by Topic
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
Schneier on Security
Schneier on Security
Jina AI
Jina AI
Stack Overflow Blog
Stack Overflow Blog
T
Threatpost
D
DataBreaches.Net
Spread Privacy
Spread Privacy
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
T
Tenable Blog
V
Vulnerabilities – Threatpost
B
Blog RSS Feed
C
Cisco Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
F
Fortinet All Blogs
The Hacker News
The Hacker News
Know Your Adversary
Know Your Adversary

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