給你乙個陣列 nums,對於其中每個元素 nums[i],請你統計陣列中比它小的所有數字的數目。
換而言之,對於每個 nums[i] 你必須計算出有效的 j 的數量,其中 j 滿足 j != i 且 nums[j] < nums[i] 。
以陣列形式返回答案。
分析:首先這個題規定數字不會超過100,那麼我們開闢乙個陣列,長度為101,整個理解為乙個桶,陣列的i
位置對應了數字i
在nums**現的個數。所以,陣列初始值都為零。遍歷一遍nums來記錄每個位置的出現的個數。
下面這句話是整個**的核心:如果拿到乙個有序的序列,那麼對於其中的乙個數字num,在這個序列中小於他的數字的個數等於位於他前面的數字出現的個數。
在我們的桶中,數字是有序的,因為我們開闢了101個位置,一定包括了nums裡面的全部數字,那麼對於陣列[8,1,2,2,3]
來說,其在桶中的是這樣體現的:[0,1,2,1,0,0,0,0,1.0.......]
。這是每個數字出現的個數,那麼如何得到題目要求的呢?
按照前面說的規律:
到這裡我們發現規律了,對於0來說,0的位置是0。i位置的答案等於其前面所有元素出現的和。我們是不是每次都要計算全部的和呢?當然不需要。
這裡我覺得是dp的思想,在桶中,小於num的數字出現的個數等於:小於num-1的數字出現的個數+num-1這個數字出現的個數。 所以,我們需要累加每個位置的值,這樣在桶中i-1
位置對應的值就是小於i
的數字出現的個數了。
有多少小於當前數字的數
給你乙個陣列 nums,對於其中每個元素 nums i 請你統計陣列中比它小的所有數字的數目。換而言之,對於每個 nums i 你必須計算出有效的 j 的數量,其中 j 滿足 j i 且 nums j nums i 以陣列形式返回答案。示例 1 輸入 nums 8,1,2,2,3 輸出 4,0,1,...
有多少小於當前數字的數字
給你乙個陣列 nums,對於其中每個元素 nums i 請你統計陣列中比它小的所有數字的數目。換而言之,對於每個 nums i 你必須計算出有效的 j 的數量,其中 j 滿足 j i 且 nums j nums i 以陣列形式返回答案 第一次解題用的暴力解法 用時 24ms public stati...
有多少小於當前數字的數字
2 nums.length 500 0 nums i 100 方法一 暴力法 class solution return res 方法二 快速排序 我們也可以將陣列排序,並記錄每乙個數在原陣列中的位置。對於排序後的陣列中的每乙個數,我們找出其左側第乙個小於它的數,這樣就能夠知道陣列中小於該數的數量。...