給定乙個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列**現次數大於 ⌊ n/2 ⌋ 的元素。
你可以假設陣列是非空的,並且給定的陣列總是存在眾數。
示例 1:
輸入: [3,2,3]
輸出: 3
示例 2:
輸入: [2,2,1,1,1,2,2]
輸出: 2
class solution
}else
}return curnum;
}}
class solution
}
說來遺憾,我也是呼叫了排序,忘了當前要的是眾數,超過一半的數,直接返回一半的位置的那個數就可以了。看來自己的演算法思維還是需要提高。
class solution
else if(nums[i] == ans)
else
}return ans;
}}
一開始沒有看懂啊,後來還懷疑他的演算法。最後想通了,真的覺得這個才是最優秀的解決方法。因為沒有排序,而且演算法複雜度是n。
他是這樣的,一開始把第乙個數拿出來,然後如果遇到和自己不一樣的數字,就當前數字的count 就減去1,繼續下乙個數,當count為0的時候,說明之前的兩個不同的數的個數是相同的,可以直接排除了(前面遇到的數字就可以抵消了,因為他們的個數是一樣的)。繼續下乙個,當發現一樣的數,count 就加1,不一樣的話,就減1.。如果當前陣列存在眾數的話,ans 儲存的那個數,一定是出現次數最多的那個眾數。
1.演算法是根據當前情況寫出來最快的解決問題的方法,如果是沒有根據當前給定的條件,不管什麼都是遍歷迴圈解決,那麼也太呆了。根本稱不上演算法。那樣的解決方法很無腦,但是很簡單。一定要根據條件,相出來一些東西。
2.想去的公司,面試有沒有過,看著同事都去了好公司,自己也很努力,但是沒有成效,但願十年寒窗無人問,一朝成名天下知吧。
求眾數的演算法研究
求眾數是乙個古老的問題。眾數 是一組資料中出現次數最多的數值。求眾數的主要演算法有 1,hash表 時間複雜度為o n 但空間極大,通常讓人難以承受 2,排序 對元素表進行排序,然後統計元素出現的個數,得出眾數。時間複雜度為o nlgn 空間複雜度為o n 3,二叉搜尋樹 用rbtree之類的樹來實...
leetcode 演算法 求眾數 169
leetcode 傳送門 給定乙個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在眾數。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2 本題是求陣列 現次數大於一半的元素。乙個基...
169 求眾數 229 求眾數 II
不限定時間複雜度的話,很多人會先排序,再遍歷的方法來做。不限定空間複雜度的話,很多人會用hash表來做。那麼,有了這兩個限定,就只能用摩爾投票演算法了。主元素問題典型解法。摩爾投票演算法 時間複雜度o n 空間複雜度o 1 class solution else if nums i ans cnt ...