算法-技巧-簡單-只出現一次的數字、多數元素

?記錄一下算法題的學習10

只出現一次的數字

leetcode題目:給你一個?非空?整數數組?nums?,除了某個元素只出現一次以外,其余每個元素均出現兩次。找出那個只出現了一次的元素。你必須設計并實現線性時間復雜度的算法來解決此問題,且該算法只使用常量額外空間

技巧? 位運算 異或運算 Java中異或運算符^? 異或運算性質三種

  • 任何數和0做異或運算,結果仍然是原來的數,即 a⊕0=a。
  • 任何數和其自身做異或運算,結果是 0,即 a⊕a=0。
  • 異或運算滿足交換律和結合律,即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。

代碼展示

class Solution {public int singleNumber(int[] nums) {int sole=0;//遍歷整個數組里的元素,由于題目所給條件除了某個元素只出現一次以外,其余每個元素均出現兩次//合理使用異或運算的特點//我們最終獲得的就是只出現一次的元素for(int num=0;num<nums.length;num++){ sole^=nums[num];}return sole;}
}

?多數元素

leetcode題目:給定一個大小為?n?的數組?nums?,返回其中的多數元素。多數元素是指在數組中出現次數?大于?? n/2 ??的元素。你可以假設數組是非空的,并且給定的數組總是存在多數元素。

1.摩爾投票法??核心理念為?票數正負抵消

  • 候選人(candidates)初始化為 nums[0],票數 count 初始化為 1。
  • 當遇到與candidates 相同的數,則票數 count = count + 1,否則票數 count = count - 1。
  • 當票數 count 為 0 時,更換候選人,并將票數 count 重置為 1。
  • 遍歷完數組后,candidates 即為最終答案
class Solution {public int majorityElement(int[] nums) {int candidates= nums[0], count = 1;for (int i = 1; i < nums.length; ++i) {if (candidates == nums[i])count+=1;else if ( --count == 0) {candidates = nums[i];count = 1;}}return candidates;}
}

2.數組排序法? 將數組 nums 排序,數組中點的元素 一定為眾數。代碼展示

class Solution {public int majorityElement(int[] nums) {//數組升序Arrays.sort(nums);int most_number=0; //初始化多數元素--》眾數為0most_number=nums[nums.length/2]; //將數組 nums 排序,數組中點的元素 一定為眾數。return most_number;}
}
class Solution {public int majorityElement(int[] nums) {//數組降序 jdk8使用Integer[] integers = Arrays.stream(nums).boxed().toArray(Integer[]::new);Arrays.sort(integers ,Collections.reverseOrder ());int most_number=0; //初始化多數元素--》眾數為0most_number=integers[integers.length/2]; //將數組 nums 排序,數組中點的元素 一定為眾數。return most_number;}
}

?注意

  • ?如果想要使用降序:Arrays.sort(scores,Collections.reverseOrder());。
  • 首先要注意的是不能用int這個類型了,要用Integer,不能使用基本類型(int,double, char)
  • 如果是int型需要改成Integer,float要改成Float

舉例Integer[] 和int[] 互轉 jdk8使用Stream流來實現互相轉化

// int[] --> Integer[]
int[] arr = {1, 2, 3, 4, 5};
Integer[] integers = Arrays.stream(nums).boxed().toArray(Integer[]::new);
// Integer[] --> int[]
int[] nums = Arrays.stream(integers).mapToInt(Integer::valueOf).toArray();

3.哈希表統計法:?遍歷數組?nums?,用 HashMap 統計各數字的數量,即可找出眾數

方法作用
getOrDefault()?獲取指定 key 對應對 value,如果找不到 key ,則返回設置的默認值
hashmap.getOrDefault(Object key, V defaultValue)
Map.EntryMap聲明的一個內部接口,此接口為泛型,定義為Entry<K,V>。它表示Map中的一個實體(一個key-value對)。接口中有getKey(),getValue方法。
map.entrySet()

java中 鍵-值?對的集合,Set里面的類型是Map.Entry,一般可以通過map.entrySet()得到。

entrySet實現了Set接口,里面存放的是鍵值對。一個K對應一個V

class Solution {public int majorityElement(int[] nums) {HashMap<Integer,Integer> map=new HashMap<>();//建立一個哈希表for(int i=0;i<nums.length;i++){map.put(nums[i],map.getOrDefault(nums[i],0)+1);//將nums集合里面的元素添加到哈希表中}int key = 0;int value = 0;//哈希表遍歷,找到眾數for(Map.Entry<Integer,Integer> entry:map.entrySet()){if(entry.getValue()>value){value = entry.getValue();key = entry.getKey();}}return key;}
}

?結束拜拜!

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

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

相關文章

「Whale 帷幄」連續入選科技榜單,AGI 沖擊波正在加速行業洗牌

以 AGI 為底座&#xff0c;品牌 MarTech 正在經歷一場前所未有的深度變革。 近日&#xff0c;彎弓研究院發布「中國 MarTech 500 強榜單」&#xff0c;以 2023 中國營銷技術&#xff08;MarTech&#xff09;生態為研究對象&#xff0c;洞察行業現象與未來趨勢。作為品牌數字化…

AMEYA360:蔡司新能源汽車解決方案驅動產業未來

電動化正在重塑中國汽車工業。自中國汽車工業開始發展以來&#xff0c;在電動化和智能化的浪潮推動下&#xff0c;汽車行業從未面臨著如此巨大的變革。得益于中國汽車產業尤其是新能源車過去十余年的激流勇進&#xff0c;消費者對新能源汽車的接受度也在發生轉變。新能源汽車市…

2016年全國碩士研究生入學統一考試管理類專業學位聯考英語(二)試題

Section IUse of English Directions: Read the following text.Choose the best word(s) for each numbered blank and mark A&#xff0c;B,Cor D on the ANSWER SHEET.(10 points)   Happy people work differently.They’re more productive&#xff0c;more creative&am…

前后端性能優化實踐(含Java代碼部分、數據庫部分、React前端部分)

最近的一個大屏報表統計的接口查詢速度很慢&#xff0c;耗時近一分鐘左右&#xff0c;數據量級只是700萬左右&#xff0c;但很慢&#xff0c;最后優化到4秒左右&#xff0c;客戶還能接受&#xff0c;但其實還可以在優化&#xff0c;先這樣吧&#xff0c;簡單記錄下。這次主要優…

App Inventor 2 文本轉數字

App Inventor 2 是弱語言類型&#xff0c;文本和數字之間不用刻意去轉換&#xff0c;之間賦值就可以了。文本賦值給數字變量如下&#xff1a; 運行結果&#xff1a;124 注意&#xff1a;數字變量初始化的時候要給一個數字的初始值&#xff0c;表明它是數字。 如果文本中含有非…

java與c++中的分支語句switch的不同

java中的switch后可用字符串,而C只能用字符和數字 switch(suffix){case "js":contentType"text/javascript";break;case "css":contentType"text/css";break;}c switch (x){case 0:case 1:case 2:rth 3;break;case 3:case 4:case 5:r…

系列三、事務

一、事務 1.1、概述 事務是數據庫操作的基本單元&#xff0c;它是指邏輯上的一組操作&#xff0c;要么都成功&#xff0c;要么都失敗。典型場景&#xff1a;轉賬&#xff0c;例如Jack給Rose轉賬1000元&#xff0c;轉賬成功&#xff1a;Jack賬戶的余額少1000元&#xff0c;Rose…

關于進制的轉化

二進制轉十進制&#xff1a; &#x1f530; 方法一&#xff1a;二進制轉十進制&#xff0c;用各數的碼位與位權的乘積之和&#xff0c;說白了就是用從右到左的每個數去乘以2的冪次方&#xff08;最右邊是0&#xff09;&#xff0c;然后就所有的數相加。 補充&#xff1a;位權是…

<藍橋杯軟件賽>零基礎備賽20周--第7周--棧和二叉樹

報名明年4月藍橋杯軟件賽的同學們&#xff0c;如果你是大一零基礎&#xff0c;目前懵懂中&#xff0c;不知該怎么辦&#xff0c;可以看看本博客系列&#xff1a;備賽20周合集 20周的完整安排請點擊&#xff1a;20周計劃 每周發1個博客&#xff0c;共20周&#xff08;讀者可以按…

VMware共享文件夾不能放mysql的數據

概要 使用VMware搭建了一個虛擬機&#xff0c;準備做數據庫服務器。服務器是linux系統&#xff0c;安裝了mysql和redis。為了數據安全&#xff0c;準備將mysql的數據文件放到共享文件夾中&#xff0c;嘗試多次后都沒成功。問題可能是共享文件夾中的文件的擁有者都是root&#…

MFC所有控件介紹及基本使用

一、前言 本篇文檔介紹了MFC控件的基本使用&#xff0c;同時提供了關于MFC控件使用的工程代碼&#xff0c;程序界面如下圖&#xff0c;有興趣的可以到文檔最后的鏈接處進行下載。 二、控件介紹 2.1 Button &#xff08;按鈕&#xff09; 2.2 CheckBox&#xff08;復選框&am…

【jvm】虛擬機之堆

目錄 一、堆的核心概述二、堆的內存細分&#xff08;按分代收集理論設計&#xff09;2.1 java7及以前2.2 java8及以后 三、堆內存大小3.1 說明3.2 參數設置3.3 默認大小3.4 手動設置3.5 jps3.6 jstat3.7 OutOfMemory舉例 四、年輕代與老年代4.1 說明 五、對象分配過程5.1 說明5…

電腦鍵盤推薦

一、鍵盤分類 &#xff08;1&#xff09;鍵位個數 目前有75&#xff0c;84&#xff0c;87&#xff0c;98&#xff0c;104&#xff0c;108的。 &#xff08;2&#xff09;薄膜鍵盤和機械鍵盤 薄膜鍵盤就是大多數辦公室常見的鍵盤&#xff0c;主要打一個便宜&#xff0c;耐造…

Python武器庫開發-前端篇之Html基礎語法(二十九)

前端篇之Html基礎語法(二十九) HTML 元素 HTML元素指的是HTML文檔中的標簽和內容。標簽用于定義元素的類型&#xff0c;而內容則是元素所包含的內容。HTML元素由開始標簽和結束標簽組成&#xff0c;也可以是自閉合標簽。 例如&#xff0c;下面是一個叫做<p>的HTML元素…

Android開發從0開始(服務)

Android后臺運行的解決方案&#xff0c;不需要交互&#xff0c;長期運行。 服務基礎框架&#xff1a; public class MyService extends Service { public MyService() { } Override public IBinder onBind(Intent intent) { //activity與service交互&#xff08;需要繼…

全網最全圖解Kafka適用場景

消息系統 消息系統被用于各種場景&#xff0c;如解耦數據生產者&#xff0c;緩存未處理的消息。Kafka 可作為傳統的消息系統的替代者&#xff0c;與傳統消息系統相比&#xff0c;kafka有更好的吞吐量、更好的可用性&#xff0c;這有利于處理大規模的消息。 根據經驗&#xff…

淘寶、1688代購系統;微信代購小程序,代購系統源代碼,PHP前端源碼演示

電商價格數據監測接口、品牌商品控價接口、商品數據分析接口和比價搜索API接口都是非常實用的電商接口服務&#xff0c;下面我將為您詳細介紹這些接口的用途和使用方式。 1.電商價格數據監測接口&#xff08;注冊獲取請求調用key&#xff09; taobao.item_get-獲得淘寶商品詳…

ubuntu環境刪除qtcreator方法

文章目錄 方法1方法2方法3參考不同的安裝方法,對應不同的刪除方法 方法1 apt-get或者dpkg 方法2 QtCreatorUninstaller 方法3 MaintenanceTool

2023亞太杯數學建模C題思路分析 - 我國新能源電動汽車的發展趨勢

1 賽題 問題C 我國新能源電動汽車的發展趨勢 新能源汽車是指以先進技術原理、新技術、新結構的非常規汽車燃料為動力來源( 非常規汽車燃料指汽油、柴油以外的燃料&#xff09;&#xff0c;將先進技術進行汽車動力控制和驅動相結 合的汽車。新能源汽車主要包括四種類型&#x…

js中forEach、filter、map的區別

forEach、filter、map都可以遍歷數組&#xff0c;那么三者有什么區別&#xff1f; 區別&#xff1a; forEach遍歷數組全部元素&#xff0c;利用回調函數對數組進行操作&#xff0c;不會返回新的數組,return只用于控制循環是否跳出當前循環; filter返回一個新的數組&#xff0…