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は難しいけど楽しい!