日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【LeetCode笔记】338. 比特位计数(Java、位运算、动态规划)

發布時間:2024/7/23 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【LeetCode笔记】338. 比特位计数(Java、位运算、动态规划) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 題目描述
  • 思路 & 代碼
      • 無注釋二刷

題目描述

  • 難點在于 O(n)

思路 & 代碼

  • 理解題意,分析出 O(n) 復雜度應該是要用到之前的值來得到當前值——動態規劃
  • 核心結論:奇數比前一個數多一個1,偶數和偶數除二后的數的1數量一樣
  • 邊界 & 狀態轉移方程 & 最優子結構 見代碼注釋
  • 時間復雜度 O(n)
class Solution {public int[] countBits(int num) {int[] ans = new int[num + 1];// 邊界:ans[0]已經初始化為0了for(int i = 1; i <= num; i++){// 兩個狀態轉移方程// 奇數情況:比前一個偶數多1if((i & 1) == 1){ans[i] = ans[i - 1] + 1; }// 偶數情況:和當前數除2后的數一樣else{ans[i] = ans[i >> 1];}// 最優子結構:ans[i - 1] or ans[i >> 1]}return ans;} }

無注釋二刷

  • 當然,之前的位運算寫法確實更有逼格啦。。
class Solution {public int[] countBits(int n) {int[] ans = new int[n + 1];for(int i = 0; i <= n; i++) {if(i % 2 == 1) {ans[i] = ans[i - 1] + 1;}else {ans[i] = ans[i / 2];}}return ans;} }

總結

以上是生活随笔為你收集整理的【LeetCode笔记】338. 比特位计数(Java、位运算、动态规划)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。