LeetCode145|數組中數字出現的次數II

2021-01-14 碼農王同學
一,數組中數字出現的次數II1,問題描述

在一個數組 nums 中除一個數字只出現一次之外,其他數字都出現了三次。請找出那個只出現一次的數字。

2,示例描述
示例 1:

輸入:nums = [3,4,3,3]
輸出:4
示例 2:

輸入:nums = [9,1,7,9,7,9,7]
輸出:1
 

限制:

1 <= nums.length <= 10000
1 <= nums[i] < 2^31


3,題解思路

基於hashmap鍵值對集合

4,題解程序

import java.util.HashMap;
import java.util.Map;

public class SingleNumberTest5 {
public static void main(String[] args) {
int[] nums = {3, 4, 3, 3};
int singleNumber = singleNumber(nums);
System.out.println("singleNumber = " + singleNumber);
}

public static int singleNumber(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(nums[i])) {
map.put(nums[i], map.get(nums[i]) + 1);
} else {
map.put(nums[i], 1);
}
}
return map.entrySet()
.stream()
.filter(x -> x.getValue() == 1)
.findFirst()
.get()
.getKey();
}
}

5,總結一下

對於本題,整體最容易理解的思路就是基於鍵值對集合hashmap進行解決了

歷史文章目錄

數據結構:王同學下半年曾寫過的JDK集合源碼分析文章匯總


算法匯總:leetcode刷題匯總(非最終版)



Long-press QR code to transfer me a reward

感謝遇到的你

As required by Apple's new policy, the Reward feature has been disabled on Weixin for iOS. You can still reward an Official Account by transferring money via QR code.

相關焦點

  • ​LeetCode刷題實戰137:只出現一次的數字 II
    今天和大家聊的問題叫做只出現一次的數字 II,我們先來看題面:https://leetcode-cn.com/problems/single-number-ii/Given an integer array nums where every element appears three times except for one, which appears exactly
  • [LeetCode] 996. Number of Squareful Arrays 平方數組的個數
    其實這道題有兩個難點,一個是如何求全排列,另一個是如何在生成全排列的過程中驗證平方數組。LeetCode 有好幾道關於全排列的題,比較基本的就是這兩道 Permutations 和 Permutations II,很明顯這道題中的數字是有可能重複的,所以跟後者更接近。其實這道題的解法就是基於 Permutations II 來做的,只不過在過程中加入了判斷平方數組的步驟。
  • [LeetCode] 912. Sort an Array 數組排序
    題目給定了每個數字的範圍是 [-50000, 50000],並不是特別大,這裡可以使用記數排序 Count Sort,在 LeetCode 中也有直接利用這個解法的題Sort Colors,建立一個大小為 100001 的數組 count,然後統計 nums 中每個數字出現的個數,然後再從0遍歷到 100000,對於每個遍歷到的數字i,若個數不為0,則加入 count 數組中對應個數的 i-50000
  • LeetCode數組類知識點&題型總結
    數組(array)就是典型的順序存儲,而鍊表就是典型的非順序存儲。數組通常用於存儲一系列相同類型的數據。當我們在創建數組時,會在內存中劃分出一塊連續的內存用於存儲數據,插入數據時,會將數據按順序存儲在這塊連續的內存中,讀取時通過訪問數組的索引迅速取出。數組名就是一個指針,指向這段內存的起始地址。通過數組的類型,編譯器知道在訪問下一個元素的時候需要在內存中後移多少個字節。
  • LeetCode刷題第三周【數組(簡單)】
    數組是目前Leetcode上題量最多的一個模塊了。刷題前我們來了解一下什麼是數組:數組是在程序設計中,為了處理方便, 把具有相同類型的若干元素按有序的形式組織起來的一種形式。首先,數組會利用 索引 來記錄每個元素在數組中的位置,且在大多數程式語言中,索引是從 0 算起的。我們可以根據數組中的索引,快速訪問數組中的元素。事實上,這裡的索引其實就是內存地址。
  • [LeetCode] 850. Rectangle Area II 矩形面積之二
    思路有了,新建一個二維數組 all 來保存所有的矩形,然後遍歷給定的矩形數組,對於每個遍歷到的數組,調用一個子函數,將當前的矩形加入 all 中。下面主要來看一下這個子函數 helper 該如何實現?首先要明白這個函數的作用是將當前矩形加入 all 數組中,而且用的是遞歸的思路,所以要傳入一個 start 變量,表示當前和 all 數組中正在比較的矩形的 index,這樣在開始的時候,檢查一下若 start 大於等於 all 數組長度,表示已經檢測完 all 中所有的矩形了,將當前矩形加入 all 數組,並返回即可。
  • [LeetCode] 918. Maximum Sum Circular Subarray 環形子數組的最大和
    既然是子數組,則意味著必須是相連的數字,而由於環形數組的存在,說明可以首尾相連,這樣的話,最長子數組的範圍可以有兩種情況,一種是正常的,數組中的某一段子數組,另一種是分為兩段的,即首尾相連的,可以參見 大神 lee215 的帖子 中的示意圖。
  • [LeetCode] 923. 3Sum With Multiplicity 三數之和的多種情況
    Note:3<=A.length<=30000<=A[i]<=1000<=target<=300這道題是之前那道 3Sum 的拓展,之前那道題是說沒有重複數字,而這道題卻有大量的重複數字,所以每個組合可能會大量重複出現,讓我們統計出所有組合的總出現次數,並對一個超大數取餘。
  • 旋轉數組的最小數字
    原題把一個數組最開始的若干個元素搬到數組的末尾,我們稱之為數組的旋轉。輸入一個遞增排序的數組的一個旋轉,輸出旋轉數組的最小元素。例如,數組 [3,4,5,1,2] 為 [1,2,3,4,5] 的一個旋轉,該數組的最小值為 1。
  • 每天一道leetcode56-合併區間
    正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2」前言 2018.11.13號打卡明天的題目:https://leetcode-cn.com/problems/minimum-path-sum/descrip題目 每天一道leetcode56
  • LeetCode-66.加一(Plus One)
    加一給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。最高位數字存放在數組的首位, 數組中每個元素只存儲單個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。示例 1:輸入: [1,2,3]輸出: [1,2,4]解釋: 輸入數組表示數字 123。
  • 給你代碼:leetcode隨筆
    整數的各位積和之差給你一個整數 n,請你幫忙計算並返回該整數「各位數字之積」與「各位數字之和」的差。有序數組中出現次數超過25%的元素給你一個非遞減的 有序 整數數組,已知這個數組中恰好有一個整數,它的出現次數超過數組元素總數的 25%。請你找到並返回這個整數example 1 :輸入:arr =[1,2,2,6,6,6,6,7,10]輸出:6來源:力扣(LeetCode)這題也不難。
  • leetcode - 可以形成最大正方形的矩形數目
    設 maxLen 為可以從矩形數組  rectangles 切分得到的 最大正方形 的邊長。返回可以切出邊長為 maxLen 的正方形的矩形 數目 。示例示例 1:輸入:rectangles = [[5,8],[3,9],[5,12],[16,5]]輸出:3解釋:能從每個矩形中切出的最大正方形邊長分別是 [5,3,5,5] 。最大正方形的邊長為 5 ,可以由 3 個矩形切分得到。
  • 「LeetCode算法精講」數組中的最短無序連續子數組(Python)
    題目內容給定一個整數數組,你需要尋找一個連續的子數組,如果對這個子數組進行升序排序,那麼整個數組都會變為升序排序。你找到的子數組應是最短的,請輸出它的長度。來源:力扣(LeetCode)連結:https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray解法效率LeetCode的Python執行用時隨緣,只要時間複雜度沒有明顯差異,執行用時一般都在同一個量級,僅作參考意義。
  • [LeetCode] 976. Largest Perimeter Triangle 最大周長的三角形
    ,讓從中選三個數當作三角形的三條邊,問能組成的三角形的最大周長是多少。所以只能想優化的解法,既然要周長最長,則肯定是選較大的數字先測比較好。這裡就先給數組排個序,然後從末尾開始,每次取出三個數字,先檢測能否組成三角形,可以的話直接返回周長,不行的話就繼續往前取,若都不行的話,就返回0,參見代碼如下:class Solution {public: int largestPerimeter(vector<int>& A) { sort(A.begin(
  • 數據結構與算法:05 Leetcode同步練習(一)
    題目01:兩數之和https://leetcode-cn.com/problems/two-sum/給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個整數,並返回他們的數組下標。
  • LeetCode 題解 | 238. 除自身以外數組的乘積
    ( 出於對空間複雜度分析的目的,輸出數組 不被視為 額外空間。)解決方案概述這似乎是一個簡單的問題,可以在線性時間和空間內解決。可以先計算給定數組所有元素的乘積,然後對數組中的每個元素 x ,將乘積除以 x 來求得除自身值的以外的數組乘積。