LoginSignup
0
0

More than 1 year has passed since last update.

Rustでアルゴリズム 〜Two Pointers〜

Last updated at Posted at 2023-02-19

Two Pointers = 尺取り法だと思っていたけどどうも必ずしも一致しないよう。
英語でいうTwo Pointersは尺取り法よりももっと範囲が広いっぽい?

下記はLeetCodeに掲載されている問題です。

977. Squares of a Sorted Array

Submission

impl Solution {
    pub fn sorted_squares(nums: Vec<i32>) -> Vec<i32> {

        let n = nums.len();
        let mut result = vec![0; n];
        let (mut left, mut right) = (0, n - 1);
        for i in (0..n).rev() {
            if nums[left].abs() > nums[right].abs() {
                result[i] = nums[left].pow(2);
                left += 1;
            } else {
                result[i] = nums[right].pow(2);
                right -= 1;
            }
        }
        return result;
    }
}

要はleftとrightで範囲を狭めていけばTwo Pointersということになるのだろうか?
ちなみにTwo Pointers使ってないけどこちらの方が実行速度は速かったです💦

impl Solution {
    pub fn sorted_squares(nums: Vec<i32>) -> Vec<i32> {
        let mut result: Vec<i32> = nums.iter().zip(nums.iter()).map(|(&a, &b)| a * b).collect();
        result.sort();

        return result;
    }
}

Rust初心者のため間違いなどあれば(優しく)ご指摘ください('▽')
嗚呼、Rustは難しいけど楽しい!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0