菊廠0510面試手撕題目解答

題目

輸入一個整數數組,返回該數組中最小差出現的次數。

示例1:輸入:[1,3,7,5,9,12],輸出:4,最小差為2,共出現4次;

示例2:輸入:[90,98,90,90,1,1],輸出:4,最小差為0,其中[1,1]出現1次,[90,90,90]兩兩相減,共出現3次;

解題思路

優解

思路與代碼

  1. 排序數組:使用內置的排序方法對數組進行排序。

  2. 計算相鄰差值:遍歷排序后的數組,計算相鄰元素的差值,并存儲在列表diffs中。

  3. 確定最小差值:使用min函數找到diffs中的最小值。

  4. 處理最小差值為0的情況:遍歷排序后的數組,統計連續相同元素的組,并計算每組貢獻的對數。連續重復元素的組的對數計算公式為k*(k-1)/2,其中k是該組的元素個數。

  5. 處理最小差值不為0的情況:直接統計相鄰差值等于最小差值的次數,使用count方法實現。

這種方法通過排序和線性遍歷,確保了時間復雜度為O(n log n),適用于較大的數組。

def min_diff_count(nums):nums.sort()n = len(nums)if n < 2:return 0diffs = [nums[i] - nums[i-1] for i in range(1, n)]min_diff = min(diffs)if min_diff == 0:total = 0current_count = 1for i in range(1, n):if nums[i] == nums[i-1]:current_count += 1else:if current_count >= 2:total += current_count * (current_count - 1) // 2current_count = 1# 處理最后一個可能的連續組if current_count >= 2:total += current_count * (current_count - 1) // 2return totalelse:return diffs.count(min_diff)# nums = [1, 3, 5, 7, 9, 12]
nums = [90, 98, 90, 90, 1, 1]
print(min_diff_count(nums))
暴力解

思路與代碼

  1. 初始化:定義最小差值為無窮大(float('inf')),計數器初始化為0。

  2. 遍歷所有元素對:使用雙重循環遍歷所有可能的元素對(i < j),避免重復計算。

  3. 計算絕對差:對于每對元素,計算它們的絕對差。

  4. 更新最小差值和計數

    • 如果當前差值小于已知最小差值,則更新最小差值,并將計數器重置為1。

    • 如果當前差值等于已知最小差值,則計數器加1。

  5. 返回結果:最終返回最小差值出現的次數。

  • 示例1:輸入?[1, 3, 7, 5, 9, 12],輸出為?4

  • 示例2:輸入?[90, 98, 90, 90, 1, 1],輸出為?4

  • 極端案例:輸入?[1, 1, 1],輸出為?3(所有兩兩對的差均為0)。

此方法的時間復雜度為?O(n^2),適用于小規模數據。對于大規模數據,推薦使用排序后相鄰元素差值的優化方法。

def min_diff_count_brute_force(nums):n = len(nums)if n < 2:return 0min_diff = float('inf')count = 0for i in range(n):for j in range(i + 1, n):diff = abs(nums[i] - nums[j])if diff < min_diff:# 發現更小的差值,重置計數min_diff = diffcount = 1elif diff == min_diff:# 差值等于當前最小值,增加計數count += 1return count# nums = [1, 3, 5, 7, 9, 12]
nums = [90, 98, 90, 90, 1, 1]
print(min_diff_count_brute_force(nums))

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

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

相關文章

C——五子棋小游戲

前言 五子棋&#xff0c;又稱連珠棋&#xff0c;是一種雙人對弈的棋類游戲。游戲目標是在一個棋盤上&#xff0c;通過在橫、豎、斜線上依次放置棋子&#xff0c;使自己的五個棋子連成一線&#xff0c;即橫線、豎線或斜線&#xff0c;且無被對手堵住的空位&#xff0c;從而獲勝…

ik 分詞器 設置自定義詞典

進入 ES 的安裝目錄&#xff0c;進入 /elasticsearch-8.10.0/plugins/ik/config/ 文件夾目錄&#xff0c;打開 IKAnalyzer.cfg.xml 文件進行配置。 一、添加 自定義擴展詞典 擴展詞&#xff1a;就是不想哪些詞分開&#xff0c;讓他們成為一個詞&#xff0c;比如“蒙的全是對…

Linux筆記---信號(上)

1. 信號的概念 Linux下的信號機制是一種進程間通信&#xff08;IPC&#xff09;的方式&#xff0c;用于在不同進程之間傳遞信息。 信號是一種異步的信息傳遞方式&#xff0c;這意味著發送信號的進程只發送由信號作為載體的命令&#xff0c;而并不關心接收信號的進程如何處置這…

UG 二次開發- UG內部調用DLL

【1】用VS新建一個dll工程 將項目設置為x64平臺&#xff08;這步很重要&#xff0c;否則程序無法編譯成功&#xff09; 【2】添加UG頭文件目錄&#xff0c;屬性頁->C/C->常規->附加包含目錄 【3】添加UG庫所在目錄&#xff0c;屬性頁->鏈接器->常規->附加庫目…

wordcount在mapreduce的例子

1.啟動集群 2.創建項目 項目結構為&#xff1a; 3.pom.xml文件為 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://mave…

智慧城市綜合運營管理系統Axure原型

這款Axure原型的設計理念緊緊圍繞城市管理者的需求展開。它旨在打破傳統城市管理中信息孤島的局面&#xff0c;通過統一標準接入各類業務系統&#xff0c;實現城市運營管理信息資源的全面整合與共享。以城市管理者為中心&#xff0c;為其提供一個直觀、便捷、高效的協同服務平臺…

Go語言:json 作用和語法

在 Go 語言中&#xff0c;JSON 字段&#xff08;也稱為 JSON Tag&#xff09;是附加在結構體字段上的元數據&#xff0c;用于控制該字段在 JSON 編碼&#xff08;序列化&#xff09;和解碼&#xff08;反序列化&#xff09; 時的行為。它的語法是&#xff1a; type StructName…

MATLAB復制Excel數據到指定區域

Matlab中如何將Excel表中的265-528行F-AA列數據復制到1-263行AE-AZ中 版本&#xff1a;MatlabR2018b clc; clear; %舊Excel文件名 oldFile ; %新Excel文件名 newFile ; % 工作表名稱&#xff08;舊表和新表一致&#xff09; sheetName Sheet1; % 舊文件中待復制的數據范…

vue3+flask+sqlite前后端項目實戰

基礎環境安裝 pycharm 下載地址&#xff1a; https://www.jetbrains.com/zh-cn/pycharm/download/?sectionwindows vscode 下載地址 https://code.visualstudio.com/docs/?dvwin64user python 下載地址 https://www.python.org/downloads/windows/ Node.js&#xff08;含npm…

Java 內存模型(JMM)與內存屏障:原理、實踐與性能權衡

Java 內存模型&#xff08;JMM&#xff09;與內存屏障&#xff1a;原理、實踐與性能權衡 在多線程高并發時代&#xff0c;Java 內存模型&#xff08;JMM&#xff09; 及其背后的內存屏障機制&#xff0c;是保障并發程序正確性與性能的基石。本文將系統梳理 JMM 的核心原理、內…

動手學深度學習12.3.自動并行-筆記練習(PyTorch)

以下內容為結合李沐老師的課程和教材補充的學習筆記&#xff0c;以及對課后練習的一些思考&#xff0c;自留回顧&#xff0c;也供同學之人交流參考。 本節課程地址&#xff1a;無 本節教材地址&#xff1a;12.3. 自動并行 — 動手學深度學習 2.0.0 documentation 本節開源代…

C++類和對象之初始化列表

初始化列表 C初始化列表詳解&#xff1a;性能優化與正確實踐什么是初始化列表&#xff1f;初始化列表的三大核心作用1. 性能優化&#xff1a;避免不必要的賦值操作2. 強制初始化&#xff1a;處理const和引用成員3. 基類初始化&#xff1a;正確調用父類構造函數4.必須使用初始化…

continue通過我們的開源 IDE 擴展和模型、規則、提示、文檔和其他構建塊中心,創建、共享和使用自定義 AI 代碼助手

?一、軟件介紹 文末提供程序和源碼下載 Continue 使開發人員能夠通過我們的開源 VS Code 和 JetBrains 擴展以及模型、規則、提示、文檔和其他構建塊的中心創建、共享和使用自定義 AI 代碼助手。 二、功能 Chat 聊天 Chat makes it easy to ask for help from an LLM without…

基于Spring Boot + Vue的母嬰商城系統( 前后端分離)

一、項目背景介紹 隨著母嬰行業在互聯網平臺的快速發展&#xff0c;越來越多的家庭傾向于在線選購母嬰產品。為了提高商品管理效率和用戶購物體驗&#xff0c;本項目開發了一個基于 Spring Boot Vue 技術棧的母嬰商城系統&#xff0c;實現了商品分類、商品瀏覽、資訊展示、評…

實戰演練:用 AWS Lambda 和 API Gateway 構建你的第一個 Serverless API

實戰演練:用 AWS Lambda 和 API Gateway 構建你的第一個 Serverless API 理論千遍,不如動手一遍!在前面幾篇文章中,我們了解了 Serverless 的概念、FaaS 的核心原理以及 BaaS 的重要作用。現在,是時候把這些知識運用起來,親手構建一個簡單但完整的 Serverless 應用了。 …

node.js 實戰——express圖片保存到本地或服務器(七牛云、騰訊云、阿里云)

本地 ? 使用formidable 讀取表單內容 npm i formidable ? 使用mime-types 獲取圖片后綴 npm install mime-types? js 中提交form表單 document.getElementById(uploadForm).addEventListener(submit, function(e){e.preventDefault();const blob preview._blob;if(!blob)…

2025最新:3分鐘使用Docker快速部署單節點Redis

&#x1f9d1;?&#x1f3eb; 詳細教程&#xff1a;通過 Docker 安裝單節點 Redis &#x1f6e0;? 前提條件&#xff1a; 你需要在 Ubuntu 系統上進行操作&#xff08;如果你在其他系統上操作&#xff0c;可以按相似步驟進行調整&#xff09;。已安裝 Docker 和 Docker Com…

CentOS 7 系統下安裝 OpenSSL 1.0.2k 依賴問題的處理

前面有提到過這個openssl的版本沖突問題&#xff0c;也是在這次恢復服務器時遇到的問題&#xff0c;我整理如下&#xff0c;供大家參考。小小一個軟件的安裝&#xff0c;挺坑的。 一、問題 項目運行環境需要&#xff0c;指定PHP7.0.9這個版本&#xff0c;但是?系統版本與軟件…

LoRA(Low-Rank Adaptation)原理詳解

LoRA(Low-Rank Adaptation)原理詳解 LoRA(低秩適應)是一種參數高效微調(Parameter-Efficient Fine-Tuning, PEFT)技術,旨在以極低的參數量實現大模型在特定任務上的高效適配。其核心思想基于低秩分解假設,即模型在適應新任務時,參數更新矩陣具有低秩特性,可用少量參…

Solana批量轉賬教程:提高代幣持有地址和生態用戶空投代幣

前言 Solana區塊鏈因其高吞吐量和低交易費用成為批量操作&#xff08;如空投&#xff09;的理想選擇。本教程將介紹幾種在Solana上進行批量轉賬的方法&#xff0c;幫助您高效地向多個地址空投代幣。 solana 賬戶模型 在Solana中有三類賬戶&#xff1a; 數據賬戶&#xff0c;…