国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【算法學習】1920. 基于排列構建數組(java / c / c++ / python / go

aisuhua / 918人閱讀

摘要:請你構建一個同樣長度的數組,其中,對于每個,都滿足。返回構建好的數組。從開始的排列是一個由到和也包含在內的不同整數組成的數組。

非常感謝你閱讀本文,歡迎【?點贊】【?收藏】【?評論】~
放棄不難,但堅持一定很酷!希望我們大家都能每天進步一點點!?
本文由 二當家的白帽子 https://le-yi.blog.csdn.net/ 博客原創,轉載請注明來源,謝謝~



1920. 基于排列構建數組:

給你一個 從 0 開始的排列 nums(下標也從 0 開始)。請你構建一個 同樣長度 的數組 ans ,其中,對于每個 i(0 <= i < nums.length),都滿足 ans[i] = nums[nums[i]] 。返回構建好的數組 ans 。

從 0 開始的排列 nums 是一個由 0 到 nums.length - 1(0 和 nums.length - 1 也包含在內)的不同整數組成的數組。

樣例 1:

輸入:	nums = [0,2,1,5,3,4]輸出:	[0,1,2,4,5,3]解釋:	數組 ans 構建如下:	ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]]	    = [nums[0], nums[2], nums[1], nums[5], nums[3], nums[4]]	    = [0,1,2,4,5,3]

樣例 2:

輸入:	nums = [5,0,1,2,3,4]輸出:	[4,5,0,1,2,3]解釋:	數組 ans 構建如下:	ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]]	    = [nums[5], nums[0], nums[1], nums[2], nums[3], nums[4]]	    = [4,5,0,1,2,3]

提示:

  • 1 <= nums.length <= 1000
  • 0 <= nums[i] < nums.length
  • nums 中的元素 互不相同

分析

題目描述既是答案,直接新建一個同樣大小的數組,遍歷一遍,按順序賦值即可。

但是這樣需要占更多內容空間,而且單純這樣做,根本算不上算法吧?

怎樣能做到不占用新的內存空間呢?提示中,每個數的范圍都在[0,999]之間,這是個關鍵。


題解

java

按照題意的直接處理法

class Solution {    public int[] buildArray(int[] nums) {        final int n = nums.length;                int[] ans = new int[n];                for (int i = 0; i < n; ++i) {            ans[i] = nums[nums[i]];        }                return ans;    }}

不開辟新的空間,直接在原數組處理

class Solution {    public int[] buildArray(int[] nums) {        final int n         = nums.length;        final int highValue = 1000;        // 將結果值附加到數組        for (int i = 0; i < n; ++i) {            // 將原值+結果            // 一個值同時存儲了原值和結果值            nums[i] += highValue * (nums[nums[i]] % highValue);        }        // 將原值剔除,僅保留結果        for (int i = 0; i < n; ++i) {            nums[i] /= highValue;        }        return nums;    }}

c

/** * Note: The returned array must be malloced, assume caller calls free(). */int* buildArray(int* nums, int numsSize, int* returnSize){    const int highValue = 1000;    for (int i = 0; i < numsSize; ++i) {        nums[i] += highValue * (nums[nums[i]] % highValue);    }    for (int i = 0; i < numsSize; ++i) {        nums[i] /= highValue;    }    *returnSize = numsSize;    return nums;}

c++

class Solution {public:    vector<int> buildArray(vector<int>& nums) {        const int highValue = 1000;        int n = nums.size();        for (int i = 0; i < n; ++i) {            nums[i] += highValue * (nums[nums[i]] % highValue);        }                for (int i = 0; i < n; ++i) {            nums[i] /= highValue;        }        return nums;    }};

python

from typing import Listclass Solution:    def buildArray(self, nums: List[int]) -> List[int]:        highValue = 1000        n = len(nums)        for i in range(n):            nums[i] += highValue * (nums[nums[i]] % highValue)        for i in range(n):            nums[i] //= highValue        return nums

go

func buildArray(nums []int) []int {	highValue := 1000	n := len(nums)	for i := 0; i < n; i++ {		nums[i] += highValue * (nums[nums[i]] % highValue)	}	for i := 0; i < n; i++ {		nums[i] /= highValue	}	return nums;}

rust

impl Solution {    pub fn build_array(nums: Vec) -> Vec {        let mut nums = nums;                let high_value = 1000;        let n = nums.len();                for i in 0..n {            nums[i] += high_value * (nums[nums[i] as usize] % high_value);        }        for i in 0..n {            nums[i] /= high_value;        }        return nums;    }}

原題傳送門


文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/119815.html

相關文章

  • SegmentFault 技術周刊 Vol.40 - 2018,來學習一門新的編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...

    caspar 評論0 收藏0
  • SegmentFault 技術周刊 Vol.40 - 2018,來學習一門新的編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...

    nihao 評論0 收藏0
  • SegmentFault 技術周刊 Vol.40 - 2018,來學習一門新的編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...

    Drummor 評論0 收藏0
  • 算法學習】1486. 數組異或操作(java / c / c++ / python / go /

    摘要:數組定義為下標從開始且。請返回中所有元素按位異或后得到的結果。樣例輸入輸出解釋數組為,其中。為按位異或運算符。也就是只有是奇數并且是奇數的時候,最終結果的最低位才會是。 ...

    ztyzz 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<