網易有道難題TopCoder線上挑戰賽 350分題

來源:互聯網
上載者:User



 第一次做topcoder,有一些不同的感受。

 

以前讀書的時候沒怎麼聽說,現在工作一段時間後,發現知識結構不是很完整,特別想補充下演算法部分的知識。

所以有時間就做一下Topcoder,一個是換一個寫代碼的環境,畢竟contest的時間要求緊迫些。 另一個方面對自己不熟悉的演算法,可以

激勵我們去讀書和尋找。

 

於是這個周末線上做網易有道難題的第二輪的挑戰賽(第一輪可以得到一個T-SHirt,還不錯,穿著挺舒服D:),三個題目分值分別為350,500,1000分,第一道題理解並寫出來,但被別人cha掉;

第二題理解題意,演算法模模糊糊,不知道怎麼寫。最後時間來不及寫完。 第三題沒來得及看。

 

現在看來,時間把握很重要,要求儘快地理解問題並提出解決方案。

 

第一題被cha的機率很高,說明大家對演算法都存在同樣的問題,看著差不多,其實有很多邏輯的混亂。至少我的第一題後來發現的確存在思路上的問題。 教訓:寫代碼之前演算法一定要想清楚,邏輯完備很重要。

 

看了AcRush的演算法,不得不佩服。另一個感受就是:當資料或者資料量發生質變時,特別注意一下兩個問題:

1、暴力還能否解決問題 

2、很多時候都有更好的演算法來解決。

 

下面是350分的題目和根據AcRush的代碼改寫的Java版。

 

網易有道難題TopCoder
線上挑戰賽 350
分題

Problem Statement   

如果一個數字十進位表達時,不存在連續兩位相同,則稱之為“不重複數”。例如,105
、1234
和12121
都是“不重複數”,而11
、100
和1225
不是。

給定一個long
類型數字A
,返回大於A
的最小“不重複數”。

Definition   

Class:UnrepeatingNumbers

Method:getNext

Parameters: long

Returns:long

Method signature: long getNext(long A)

(be sure your method is public)

Constraints-

A
取值範圍是[0, 10^17]
,注意是閉區間。

Examples

0)  

54

Returns: 56

大於54
的最小數字是55
,但55
不是“不重複數”。下一個數字是56
,它滿足條件。

1)   

10

Returns: 12

2)  

9

Returns: 10

3)   

98

Returns: 101

99
和100
都不是“不重複數”,但101
是。

4)   

21099

Returns: 21201

This problem statement is the exclusive and proprietary
property of TopCoder, Inc. Any unauthorized use or reproduction of this
information without the prior written consent of TopCoder, Inc. is strictly
prohibited. (c)2003, TopCoder, Inc. All rights reserved.

 

 Java代碼:


public class UnrepeatingNumbers {</p><p>public static void main(String[] args) {</p><p>UnrepeatingNumbers un=new UnrepeatingNumbers();<br />Scanner cin=new Scanner(System.in);<br />while(true)<br />{<br /> System.out.println(un.getNext(cin.nextLong()));<br />}<br />}<br />public long checkAndIterate (long n)<br />{<br />StringBuffer s=new StringBuffer(String.valueOf(n));<br />for(int i=0; i+1<s.length();i++)<br />{<br />if(s.charAt(i)==s.charAt(i+1))<br />{<br /> long p10=1;<br /> for(int j=i+2; j<s.length(); j++)<br /> {<br /> s.setCharAt(j,'0');<br /> p10*=10;<br /> }<br /> n=Long.parseLong(s.toString())+p10;<br /> return n;<br />}<br />}<br /> return -1;<br />}<br />long getNext(long A)<br />{<br />A++;<br />long temp=1;<br />while(temp>0)<br />{<br />temp=checkAndIterate(A);<br />if(temp>0) A=temp;<br />}<br />return A;<br />}<br />}

 

希望對大家有協助。演算法的本質在於效率。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.