第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

IComparable<T> 實現(xiàn)有什么問題?SortedList 拋出

IComparable<T> 實現(xiàn)有什么問題?SortedList 拋出

C#
森林海 2022-06-12 14:52:04
我正在在線解決一個難題,偶然發(fā)現(xiàn)了這個問題,給定一個二維矩陣和一個數(shù)字 k,我需要返回矩陣中第 k 個最小的元素。 matrix = [       [ 1,  5,  9],       [10, 11, 13],       [12, 13, 15]    ],    k = 8,return 13.我可以通過我自己的二進制堆實現(xiàn)來解決這個問題。由于我正在準備面試,我不確定在所有情況下實現(xiàn)自己的堆是否都是可接受的解決方案。所以我嘗試用 SortedList/SortedSet 來解決這個問題。我基本上是在創(chuàng)建一個 Point 對象,它采用索引 i、j 和 i、j 處的值。我已經(jīng)實現(xiàn)了 IComparable 和 IEquatable。但是由于某種原因,在上面的示例中,索引 1,2(值 13)的 Point 對象和索引 2,1(值 13)的對象在不應(yīng)該相等時被視為相等。使用 SortedList 時出現(xiàn) ArgumentException,同時 SortedSet 只會覆蓋現(xiàn)有對象。我對 IEquatable、IComparable 的實現(xiàn)是否錯誤?我已經(jīng)仔細檢查過它們是否生成了不同的哈希碼。PS這不是作業(yè)問題。我正在通過在線面試準備平臺解決問題。public class Solution {    public int KthSmallest(int[,] matrix, int k) {        int rows = matrix.GetLength(0);        int cols = matrix.GetLength(1);        SortedSet<Point> pq = new SortedSet<Point>();        bool[,] visited = new bool[rows, cols];        int count = 1;        int i=0, j=0;        var start = new Point(i, j, matrix[i, j]);        pq.Add(start);        visited[0, 0] = true;        while(true) {            k--;            var curr = pq.Min;            pq.Remove(pq.First());            if(k == 0)                return curr.val;            i = curr.x + 1;            j = curr.y;            if(i < rows && j < cols && !visited[i, j]) {                var next = new Point(i, j, matrix[i, j]);                Console.WriteLine(next.GetHashCode());                Console.WriteLine(i+", "+j+", "+next.val);                pq.Add(next);                visited[i, j] = true;            }            i = curr.x;            j = curr.y + 1;            if(i < rows && j < cols && !visited[i, j]) {                var next = new Point(i, j, matrix[i, j]);                Console.WriteLine(next.GetHashCode());                Console.WriteLine(i+", "+j+", "+next.val);                pq.Add(next);                visited[i, j] = true;            }        }    }}
查看完整描述

1 回答

?
烙印99

TA貢獻1829條經(jīng)驗 獲得超13個贊

您在 CompareTo 中缺少返回語句。我在下面評論了您的原件以及更正的版本。在比較 [2,1] 和 [1,2] 的情況下,x 值不匹配,但是當(dāng)您點擊 this.x.CompareTo 時,您實際上從未返回該比較,因此您的值比較返回。


你有:


public int CompareTo(Point that)

    {

        if(this.val == that.val) {

            if(this.x == that.x) {

                return this.y.CompareTo(that.y);

            }

            else {

                //****MISSING RETURN STATEMENT - 

                //will return the val.ComapreTo statement after 

                //it leaves this block*****

                this.x.CompareTo(that.x);

            }

        }

        return val.CompareTo(that.val);

    }

你需要:


public int CompareTo(Point that)

    {

        if(this.val == that.val) {

            if(this.x == that.x) {

                return this.y.CompareTo(that.y);

            }

            else {

                return this.x.CompareTo(that.x);

            }

        }

        return val.CompareTo(that.val);

    }


查看完整回答
反對 回復(fù) 2022-06-12
  • 1 回答
  • 0 關(guān)注
  • 120 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號