国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

華為OD機(jī)考算法題:根據(jù)某條件聚類最少交換次數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了華為OD機(jī)考算法題:根據(jù)某條件聚類最少交換次數(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

題目部分

解讀與思路

代碼實(shí)現(xiàn)


題目部分

題目 根據(jù)某條件聚類最少交換次數(shù)
難度
題目說明 給出數(shù)字K,請(qǐng)輸出所有結(jié)果小于K的整數(shù)組合到一起的最少交換次數(shù)。
組合一起是指滿足條件的數(shù)字相鄰,不要求相鄰后在數(shù)組中的位置。
數(shù)據(jù)范圍
-100 <=K <= 100
-100 <= 數(shù)組中數(shù)值 <= 100
輸入描述 第一行輸入數(shù)組:1 3 1 4 0
第二行輸入K數(shù)值:2
輸出描述 第一行輸出最少較好次數(shù):1
補(bǔ)充說明 小于2的表達(dá)式是 1 1 0,共三種可能將所有符合要求數(shù)字組合在一起,最少交換1次。
沒有數(shù)字小于K,即不存在滿足條件的數(shù)字時(shí),返回 0。
交換規(guī)則為,任意兩個(gè)位置的數(shù)字可以相互交換。(筆者注)
-----------------------------------------
示例
示例1
輸入 1 3 1 4 0
2
輸出 1
說明
示例2
輸入 0 0 0 1 0
2
輸出 0
說明
示例3
輸入 2 3 2
1
輸出 0
說明

解讀與思路

題目解讀

第一行輸入整形數(shù)字 K,第二行輸入一串整形數(shù)字(假設(shè)這一串整形數(shù)字存放在一個(gè)數(shù)組中)。

題目要求,從第二行整形數(shù)字中,找出所有小于 K 的數(shù)字。然后通過交換位置的方式,使找出的這些數(shù)字聚合在一塊。

  • 聚合在一塊的意思是,這些數(shù)字兩兩相鄰,中間不存在不符合條件(大于或等于K)的數(shù)字。
  • 交換位置的規(guī)則是,數(shù)組(根據(jù)之前的假設(shè),數(shù)字存放在數(shù)組中)中的任意兩個(gè)下標(biāo)的數(shù)字交換都可以交換位置。

在示例 1 中,下標(biāo)為0的數(shù)字 1和下標(biāo)為3的數(shù)字4交換后,數(shù)字串變成了 4?3 1 1?0。此時(shí),從第2個(gè)元素到第4個(gè)元素,這3個(gè)數(shù)字全都小于2(K等于2)。再次過程中,交換了1次。

特別注意,在示例 3 中,沒有數(shù)字小于K,即不存在滿足條件的數(shù)字時(shí),返回 0。

此題立意很好,但在表述上還有很大的提升空間。
題干應(yīng)該準(zhǔn)確描述背景、條件和要求?;逎y懂或有歧義的題目容易產(chǎn)生誤導(dǎo)。示例作用是進(jìn)一步印證題干的描述,而不應(yīng)用于補(bǔ)充題目說明。
出題人在描述問題時(shí),部分隱含條件沒有描述出來(當(dāng)找不到滿足條件的交換次數(shù)時(shí),返回值應(yīng)該是多少),而且表述不夠清晰(應(yīng)明示交換規(guī)則為,任意兩個(gè)位置的數(shù)字可以相互交換),需要結(jié)合示例才能準(zhǔn)確理解題目意思。

分析與思路

第一行輸入的數(shù)字設(shè)為 k。
第二行輸入的一串?dāng)?shù)字,把它存到一個(gè)整形數(shù)組 arr[] 中。

先遍歷數(shù)組 arr,統(tǒng)計(jì)?arr 中小于 k 的數(shù)字個(gè)數(shù) count,并記錄這些數(shù)字的最小下標(biāo) minIdx 和 最大下標(biāo) maxIdx。如果 count 為 0,則直接返回 0。

題目要求小于 k 的數(shù)字聚合在一起,那么最終聚合的塊的數(shù)字是連續(xù)的,假設(shè)聚合塊中數(shù)字的最小下標(biāo)為 iMin,最大小標(biāo)為 iMax,那么 iMax?- iMin == count -?1,且下標(biāo)在iMin與iMax之間的所有數(shù)字都小于 k 。

對(duì)于原始數(shù)組,如果某個(gè)小于 k 的數(shù)字,其在 arr 中的下標(biāo)處于閉區(qū)間?[iMin,?iMax] 中,那么它不需要交換;如果在此閉區(qū)間之外,需要和其他下標(biāo)在 [ iMin,?iMax ] 中且大于 k 的數(shù)字交換。顯而易見,交換次數(shù)為 [iMin, iMax] 這個(gè)閉區(qū)間(閉區(qū)間為arr數(shù)組的下標(biāo))中大于 k 的數(shù)字的個(gè)數(shù)。

由于 iMin >= minIdx,iMax >= maxIdx,此題的要求可以轉(zhuǎn)換成,從 [minIdx, maxIdx] 這個(gè)閉區(qū)間中,找出一個(gè)長(zhǎng)度為 count 的閉區(qū)間(閉區(qū)間為arr數(shù)組的下標(biāo)),使 arr 數(shù)組中大于 k 的數(shù)字的個(gè)數(shù)最小。計(jì)算出的最小個(gè)數(shù),即為最終的輸出。

此算法需要遍歷數(shù)組兩次(第二次只需要遍歷 [ minIdx, maxIdx - count ]),其時(shí)間復(fù)雜度為 O(n)。實(shí)現(xiàn)過程中使用了輔助數(shù)組用于存儲(chǔ)數(shù)字,空間復(fù)雜度為 O(n)。


代碼實(shí)現(xiàn)

Java代碼

import java.util.Scanner;

/**
 * 根據(jù)某條件聚類最少交換次數(shù)
 * 
 * @since 2023.09.13
 * @version 0.2
 * @author Frank
 *
 */
public class TogetherChgCnt {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			// 第一行輸入一串?dāng)?shù)字,以空格分隔
			String stream = sc.nextLine();
			String[] strArr = stream.split(" ");
			int[] arr = new int[strArr.length];
			for (int i = 0; i < strArr.length; i++) {
				arr[i] = Integer.parseInt(strArr[i]);
			}
			// 第二行, k
			String strK = sc.nextLine();
			int k = Integer.parseInt(strK);
			processTogetherChgCnt(k, arr);
		}
	}

	private static void processTogetherChgCnt(int k, int[] arr) {
		int minIdx = -1;
		int maxIdx = -1;
		int count = 0;
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] >= k) {
				continue;
			}
			count++;
			if (minIdx == -1) {
				minIdx = i;
				maxIdx = i;
			} else {
				maxIdx = i;
			}
		}

		if (count == 0) {
			System.out.println(0);
			return;
		}

		int curCnt = 0;
		for (int i = 0; i < count; i++) {
			if (arr[minIdx + i] >= k) {
				curCnt++;
			}
		}

		int rangeCnt = curCnt;
		int stepSize = maxIdx - minIdx - count + 1;
		// 在區(qū)間[ minIdx, maxIdx ]范圍內(nèi),
		// 逐個(gè)向右移動(dòng),計(jì)算移動(dòng)后的閉區(qū)間中大于 k 的個(gè)數(shù) curCnt。
		for (int i = 0; i < stepSize; i++) {
			if (arr[minIdx + i] >= k) {
				curCnt--;
			}
			if (arr[minIdx + count + i] >= k) {
				curCnt++;
			}
			if (curCnt < rangeCnt) {
				rangeCnt = curCnt;
			}
		}
		System.out.println(rangeCnt);
	}
}

JavaScript代碼

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {
    while (line = await readline()) {
        // 第一行數(shù)據(jù)轉(zhuǎn)換成數(shù)組
        var arr = line.split(" ");
        for (var i = 0; i < arr.length; i++) {
            arr[i] = parseInt(arr[i]);
        }
        // 第二行數(shù)據(jù),k
        line = await readline();
        var k = parseInt( line );
        processTogetherChgCnt(k, arr);
    }

}();

function processTogetherChgCnt(k, arr) {
    var minIdx = -1;
    var maxIdx = -1;
    var count = 0;
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] >= k) {
            continue;
        }
        count++;
        if (minIdx == -1) {
            minIdx = i;
            maxIdx = i;
        } else {
            maxIdx = i;
        }
    }

    if (count == 0) {
        console.log(0);
        return;
    }

    var curCnt = 0;
    for (var i = 0; i < count; i++) {
        if (arr[minIdx + i] >= k) {
            curCnt++;
        }
    }

    var rangeCnt = curCnt;
    var stepSize = maxIdx - minIdx - count + 1;
    for (var i = 0; i < stepSize; i++) {
        if (arr[minIdx + i] >= k) {
            curCnt--;
        }
        if (arr[minIdx + count + i] >= k) {
            curCnt++;
        }
        if (curCnt < rangeCnt) {
            rangeCnt = curCnt;
        }
    }
    console.log(rangeCnt);
}

(完)文章來源地址http://www.zghlxwxcb.cn/news/detail-697754.html

到了這里,關(guān)于華為OD機(jī)考算法題:根據(jù)某條件聚類最少交換次數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 華為OD機(jī)試 - 最少數(shù)量線段覆蓋| 機(jī)試題算法思路 【2023】

    華為OD機(jī)試 - 簡(jiǎn)易壓縮算法(Python) | 機(jī)試題算法思路 【2023】 華為OD機(jī)試題 - 獲取最大軟件版本號(hào)(JavaScript) 華為OD機(jī)試 - 猜字謎(Python) | 機(jī)試題+算法思路 【2023】 華為OD機(jī)試 - 刪除指定目錄(Python) | 機(jī)試題算法思路 【2023】 華為OD機(jī)試 - 自動(dòng)曝光(Python) | 機(jī)試題算法

    2023年04月25日
    瀏覽(20)
  • 華為OD機(jī)考算法題:高效的任務(wù)規(guī)劃

    題目 高效的任務(wù)規(guī)劃 難度 難 題目說明 你有 n 臺(tái)機(jī)器編號(hào)為? 1 ~ n ,每臺(tái)都需要完成一項(xiàng)工作, 機(jī)器經(jīng)過配置后都能獨(dú)立完成一項(xiàng)工作。 假設(shè)第? i? 臺(tái)機(jī)器你需要花??分鐘進(jìn)行設(shè)置, 然后開始運(yùn)行,? ?分鐘后完成任務(wù)。 現(xiàn)在,你需要選擇布置工作的順序,使得用最短的

    2024年02月07日
    瀏覽(14)
  • 華為OD機(jī)考算法題:MVP爭(zhēng)奪戰(zhàn)

    題目部分 解讀與分析 代碼實(shí)現(xiàn) 題目 MVP爭(zhēng)奪戰(zhàn) 難度 易 題目說明 在星球爭(zhēng)霸籃球賽對(duì)抗賽中,強(qiáng)大的宇宙戰(zhàn)隊(duì),希望每個(gè)人都能拿到MVP。 MVP的條件是,單場(chǎng)最高分得分獲得者,可以并列,所以宇宙戰(zhàn)隊(duì)決定在比賽中,盡可能讓更多的隊(duì)員上場(chǎng),且讓所有有得分的隊(duì)員得分都

    2024年02月09日
    瀏覽(34)
  • 華為OD機(jī)考算法題:數(shù)字加減游戲

    題目部分 解讀與分析 代碼實(shí)現(xiàn) 題目 數(shù)字加減游戲 難度 難 題目說明 小明在玩一個(gè)數(shù)字加減游戲,只使用加法或者減法,將一個(gè)數(shù)字 s 變成數(shù)字 t 。 每個(gè)回合,小明可以用當(dāng)前的數(shù)字加上或減去一個(gè)數(shù)字。 現(xiàn)在有兩種數(shù)字可以用來加減,分別為 a, b (a≠b),其中 b 沒有使用

    2024年02月09日
    瀏覽(20)
  • 華為OD機(jī)考算法題:區(qū)塊鏈文件轉(zhuǎn)儲(chǔ)系統(tǒng)

    題目部分 解讀與分析 代碼實(shí)現(xiàn) 題目 區(qū)塊鏈文件轉(zhuǎn)儲(chǔ)系統(tǒng) 難度 難 題目說明 區(qū)塊鏈底層存儲(chǔ)是一個(gè)鏈?zhǔn)轿募到y(tǒng),由順序的N個(gè)文件組成,每個(gè)文件的大小不一,依次為F1、F2……Fn。隨著時(shí)間的推移,所占存儲(chǔ)會(huì)越來越大。 云平臺(tái)考慮將區(qū)塊鏈按文件轉(zhuǎn)儲(chǔ)到廉價(jià)的SATA盤,只

    2024年02月08日
    瀏覽(32)
  • 華為OD機(jī)考算法題:阿里巴巴找黃金寶箱(1)

    題目 阿里巴巴找黃金寶箱(1) 難度 易 題目說明 一貧如洗的樵夫阿里巴巴在去砍柴的路上,無意中發(fā)現(xiàn)了強(qiáng)盜集團(tuán)的藏寶地,藏寶地有編號(hào)從 0 ~ N 的箱子,每個(gè)箱子上面貼有一個(gè)數(shù)字,箱子中可能有一個(gè)黃金寶箱。 黃金寶箱滿足排在它之前的所有箱子數(shù)字和等于排在它之

    2024年02月07日
    瀏覽(19)
  • 【華為OD機(jī)考 統(tǒng)一考試機(jī)試C卷】特殊的加密算法(C++ Java JavaScript Python C語言)

    真題目錄:華為OD機(jī)考機(jī)試 真題目錄( D卷 +C卷 + B卷 + A卷) + 考點(diǎn)說明 在線OJ:點(diǎn)擊立即刷題,模擬真實(shí)機(jī)考環(huán)境 華為OD面試真題精選:華為OD面試真題精選 有一種特殊的加密算法,明文為一段數(shù)字串,經(jīng)過密碼本查找轉(zhuǎn)換,生成另一段密文數(shù)字串。 規(guī)則如下: 明文為一段

    2024年04月16日
    瀏覽(23)
  • 【華為OD機(jī)考 統(tǒng)一考試機(jī)試C卷】素?cái)?shù)之積/RSA加密算法(C++ Java JavaScript Python C語言)

    目前在考C卷,經(jīng)過兩個(gè)月的收集整理, C卷真題已基本整理完畢 抽到原題的概率為2/3到3/3, 也就是最少抽到兩道原題。 請(qǐng)注意:大家刷完C卷真題,最好要把B卷的真題刷一下,因?yàn)镃卷的部分真題來自B卷。 另外訂閱專欄還可以聯(lián)系筆者開通在線OJ進(jìn)行刷題,提高刷題效率。

    2024年03月21日
    瀏覽(24)
  • 華為OD機(jī)試(含B卷)真題2023 算法分類版,58道20個(gè)算法分類,如果距離機(jī)考時(shí)間不多了,就看這個(gè)吧,穩(wěn)穩(wěn)的

    華為OD機(jī)試(含B卷)真題2023 算法分類版,58道20個(gè)算法分類,如果距離機(jī)考時(shí)間不多了,就看這個(gè)吧,穩(wěn)穩(wěn)的

    很多小伙伴問我,華為OD機(jī)試算法題太多了,知識(shí)點(diǎn)繁雜,如何刷題更有效率呢? 我覺得可以按照“算法和數(shù)據(jù)結(jié)構(gòu)”去刷,把華為OD機(jī)試涉及到的“算法和數(shù)據(jù)結(jié)構(gòu)”列出來,一個(gè)算法刷10道題,那我豈不是無敵了? 首先,了解算法和數(shù)據(jù)結(jié)構(gòu)有哪些知識(shí)點(diǎn),在后面的刷題

    2024年02月14日
    瀏覽(24)
  • 【華為OD機(jī)試】根據(jù)IP查找城市(貪心算法—Java&Python&C++&JS實(shí)現(xiàn))

    本文收錄于專欄:算法之翼 本專欄所有題目均包含優(yōu)質(zhì)解題思路,高質(zhì)量解題代碼(JavaPythonC++JS分別實(shí)現(xiàn)),詳細(xì)代碼講解,助你深入學(xué)習(xí),深度掌握!

    2024年04月15日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包