每日一題:leetcode190.顛倒二進制位

題目描述

在這里插入圖片描述

題目分析

題目本身很簡單,沒覺得有什么技巧可以再進行優化了,覺得位運算是無法打亂相對順序的,而這里需要進行鏡像顛倒的操作。因此就踏實地寫了一個循環。

在使用位運算得到每一位的時候,我吸取了經驗,用一個臨時變量保存,這樣每次只用進行一次移位操作,這樣是一個小小的優化。

class Solution {
public:uint32_t reverseBits(uint32_t n) {uint32_t ans = 0;uint32_t t1 = 1 << 31;uint32_t t2 = 1 << 0;for (uint32_t i = 0; i < 32; ++i) {if (n & t1) {ans += t2;}t1 >>= 1;t2 <<= 1;}return ans;}
};

然后做完去看題解,發現題解用到說是叫位運算分治。其實就是簡單的分治,只不過這里是一個很小的數字,可以用位運算進行分治操作。因為大小位32,所以分治的次數是5,我們可以順序執行這5次分治,用位運算進行。

如果不是數字,并且位數更多的話,使用分治是沒有意義的,復雜度也是O(n),甚至常數更大。

官方題解

這樣好騷啊。。。

class Solution {
private:const uint32_t M1 = 0x55555555; // 01010101010101010101010101010101const uint32_t M2 = 0x33333333; // 00110011001100110011001100110011const uint32_t M4 = 0x0f0f0f0f; // 00001111000011110000111100001111const uint32_t M8 = 0x00ff00ff; // 00000000111111110000000011111111public:uint32_t reverseBits(uint32_t n) {n = n >> 1 & M1 | (n & M1) << 1;n = n >> 2 & M2 | (n & M2) << 2;n = n >> 4 & M4 | (n & M4) << 4;n = n >> 8 & M8 | (n & M8) << 8;return n >> 16 | n << 16;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383553.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383553.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383553.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

結構屈曲分析

結構屈曲分析主要用于判定結構受載后是否有失穩風險&#xff0c;作為工程應用&#xff0c;一般分為線性屈曲分析和非線性屈曲分析。 線性屈曲分析需要具備較多的前提條件&#xff0c;如載荷無偏心、材料無缺陷等&#xff0c;在實際工程應用中結構制作過程和加載方式很難達到線性…

每日一題:leetcode74.搜索二維矩陣

題目描述 題目分析 感覺這是一個放錯標簽的簡單題。題目非常簡單&#xff0c;思路應該很明確是二分&#xff0c;我很快寫了一個&#xff08;雖然不小心把!打成調試了一會&#xff09;。 class Solution { public:bool searchMatrix(vector<vector<int>>& mat…

每日一題:leetcode90.子集貳

題目描述 題目分析 感覺這道題讓自己對枚舉排列有了一個更好的認識&#xff0c;感覺自己的這種思路不錯。 假設沒有重復元素&#xff08;退化成78.子集&#xff09;&#xff0c;我們應該怎么做&#xff1f;初始的時候冪集中只有一個空集&#xff0c;然后對每個元素&#xff0…

每日一題:leetcode1006.笨階乘

題目描述 題目分析 因為順序一定且沒有括號&#xff0c;所以邏輯很簡單。我們要順序處理的矛盾在于&#xff0c;減號后面會再出現乘法和除法&#xff0c;我們不妨將對乘法和除法用一個臨時值進行計算&#xff0c;計算結束后再合并到值里面&#xff0c;一般來講乘法和除法的處理…

每日一題:leetcode80.刪除有序數組中的重復元素貳

題目描述 題目分析 又是一道貼錯標簽的簡單題&#xff0c;很明顯的雙指針&#xff0c;我的做法是用兩個變量保存是否需要記錄&#xff0c;官方題解的做法是直接判斷&#xff0c;人家的高明一些 class Solution { public:int removeDuplicates(vector<int>& nums) {…

每日一題:leetcode81.搜索旋轉排序數組Ⅱ

題目描述 題目分析 不含重復元素的題解&#xff08;leetcode33&#xff09; 這道題也是我們算法課的一道編程題&#xff0c;寫完以后發現當時的思路和現在沒有什么變化&#xff0c;果然是自己啊。我的想法是先判斷區間整體是升序的還是旋轉的&#xff0c;如果是升序的就按照正…

C++ JSON庫:JSON for Morden C++

緒論 最近因為項目的需要&#xff0c;需要對JSON進行一定的數據處理&#xff0c;因為想要用C進行編碼&#xff0c;便對C的JSON庫進行的調研&#xff0c;發現這個庫比較好用&#xff1a;JSON for Morder C。 使用指南 想要使用這個json庫&#xff0c;只需要在源文件中包含jso…

Linux信號實現精確到微秒的sleep函數:通過sigsuspend函數解決時序競態問題

原理就是先使用定時器定時&#xff0c;然后再使用pause函數或者sigsuspend函數主動阻塞掛起&#xff0c;最終恢復現場。 如果使用pause函數的話&#xff0c;優點是使用簡單&#xff0c;缺點是有可能產生時序競態&#xff0c;導致進程一直阻塞下去&#xff1a;在定時和掛起之間…

Linux創建多個子進程并通過捕獲SIGCHLD信號進行非阻塞回收

我們通過fork函數創建多個子進程&#xff0c;并通過exec函數族在子進程中進行其他的工作&#xff0c;但是為了避免僵尸進程&#xff0c;我們要對子進程進行回收。常用的回收方式是wait或者waitpid進行阻塞回收&#xff0c;因為如果非阻塞回收很難把握時機&#xff0c;而阻塞回收…

Linux創建守護進程

守護進程&#xff08;Daemon&#xff09;是運行在后臺的一種特殊進程。它獨立于控制終端并且周期性地執行某種任務或等待處理某些發生的事件。它不需要用戶輸入就能運行而且提供某種服務&#xff0c;不是對整個系統就是對某個用戶程序提供服務。Linux系統的大多數服務器就是通過…

Linux創建多個子線程并回收

創建子線程的邏輯相比子進程要更容易理解一些&#xff0c;因為線程沒有像進程那樣復制很多東西另起爐灶&#xff0c;子線程從傳入的開始函數開始運行&#xff0c;但是難點在于傳入參數和回收時獲取退出狀態&#xff0c;因為這兩個原本都是void *類型的&#xff0c;而我們在使用…

Qt發布程序

Windows&#xff1a; https://www.cnblogs.com/linuxAndMcu/p/10974927.html Ubuntu&#xff1a; https://blog.csdn.net/u014779536/article/details/107854060

K210入門

之前購買了一個Sipeed Maix M1w Dock k210的開發板&#xff0c;想著自己鼓搗鼓搗&#xff0c;在網上看到了一些好的教程&#xff0c;在這里記錄一下&#xff1a; 嵌入式AI從入門到放肆【K210篇】-- 硬件與環境&#xff1a;介紹了各種開發環境的搭建&#xff0c;但是不是特別詳細…

C++輸入輸出:cin/cout 還是 scanf/printf?

相信使用C的人都有一種迷惑或者是不自信&#xff1a;在輸入輸出的時候是不是應該使用scanf/printf更好呢&#xff0c;因為傳說cin/cout龜速&#xff0c;我當時也長期被這個所困擾&#xff0c;后來在閱讀C primer第五版的時候我自己做了一個測試&#xff0c;發現如果不使用std::…

UVA - 101:The Blocks Problem

原本以為是一道很簡單的模擬題&#xff0c;結果寫了一個小時。。。很長時間不碰算法題&#xff0c;的確手感差很多。不過我覺得隨著刷題慢慢多起來應該會好的。 題目的意思也有點含糊&#xff0c;需要自己去猜&#xff0c;大概意思就是槽里有一堆木頭&#xff0c;每個槽剛開始…

UVA - 12096:The SetStack Computer

題目描述很簡單&#xff0c;難點在于如何對集合進行編碼&#xff0c;因為是無限的&#xff0c;好像沒有一個方向進行編碼。 紫書給的題解十分巧妙&#xff1a;給新出現的集合進行編碼 的確&#xff0c;我們沒有必要為所有可能出現的集合編碼后再開始&#xff0c;我們就可以簡單…

UVA - 540:Team Queue

主要的關鍵在于&#xff1a;不要試圖讓所有團隊的人在一個隊列里面&#xff0c;因為這樣如果新入隊的是一個前面團隊的成員則必須先出隊再入隊。 應該把每個團隊看做一個整體&#xff0c;用一個隊列維護團隊的順序&#xff0c;用t個隊列維護每個團隊內部的順序。 還有就是要維…

UVA-136:Ugly Numbers

很簡單的一道題&#xff0c;但是我竟然蠢到想不明白為什么如果從頭生成會出現大量重復的數字。 寫的時候主要出現的錯誤在爆int上&#xff0c;一定要注意數據范圍。 #include <iostream> #include <queue> #include <set>using namespace std; using ll lo…

類的成員函數可以訪問屬于該類的任意對象的私有變量

之前在書上看到成員函數可以訪問類的私有變量的時候覺得是廢話嘛&#xff0c;如果成員函數都不能訪問那私有變量不就變成了花瓶了。然而發現自己還是太naive。 這句話的意思是&#xff1a;在類的作用域內&#xff0c;包含成員函數、靜態成員函數和友元函數內&#xff0c;可以訪…

GMP使用入門

最近寫了一個高精度的模板&#xff0c;想要用GMP庫測試一下&#xff0c;總結一下GMP環境的搭建。 環境搭建&#xff1a;GMP大法教你重新做人(從入門到實戰) 解壓.tar.lz的 時候可能會遇到一點問題&#xff0c;可以參考這個博客&#xff1a;.tar.lz壓縮包解壓 需要注意的是C需要…