如何取得數列中不相同的值


例如在數列1、1、2、3、3、4、5、6、6、7、7、8、9中取出不相同的值,輸出結果為1、2、3、4、5、6、7、8、9。求解答!

12 个解决方案

#1


數據量大不大?如果不大的話可以用STL中的set來保存數據,set中所包含的元素的值是唯一的
而mulitset可以插入重復數據

#2


數據量不大,但是我不會用stl,具體如何做?能用C#代碼寫嗎?
引用 1 樓  的回復:
數據量大不大?如果不大的話可以用STL中的set來保存數據,set中所包含的元素的值是唯一的
而mulitset可以插入重復數據

#3


直接用位圖bitset 豈不更好更方便啊

#4


數據范圍不大的話就用hash表或者set,如果是32位數可以用位表。

#5


這種問題一般都是位圖或hash搞定吧。

#6


數據量不大的話可以先排序,排序排好后從第一個開始取,每次取出前和上次取的值比較是否相同,不同則取出,相同則放棄。

#7


看來樓主問的不是算法,是C#的問題。framework里有現成的方法可以用:

int[] numbers = new[] { 1, 1, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 9 };
int[] result = numbers.Distinct().ToArray();

#8


數列a[i],設數組a大小為MAX;
設數組b[j]全為0;
for(i=0;i<MAX;i++)
 { 
   j=a[i];
   if(0==b[j])
    {
      b[j]=1;
      printf("%d ",a[i]);
     }
  }

#9


用STL的unique()函數秒殺之

#10


這個復雜度可以做到O(N)
用位運算,異或運算。
順次異或,結果為上個數字的,就是重復的。

位運算,最快了

#11


嘿嘿,自己也寫了一個出來
static void Main(string[] args)
        {
            List<int> list = new List<int>{ 1,1,2,3,3,4,5,6,6,7,7,8,9};
            for (int i = 0; i < list.Count-1; i++)
            {
                for (int j=0; j < list.Count-1; j++)
                {
                    if (list[j] == list[j+1])
                    {
                        list.RemoveAt(j);
                    }
                }
            }

            for (int u = 0; u < list.Count; u++)
            {
                Console.Write(list[u]);
            }
                Console.ReadKey();
        }

謝謝各位大俠相助!

#12


你這個寫法是最爛的,是O(N^2)

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com