1. ☺️はじめに☺️
始めようと思ったきっかけ
- コーディングスキル向上と理解定着のため
→業務で必要なコーディングをするだけでは知識の幅が狭まるのではないかと思い、全般的な知識を身につけるべく、leetCodeに手を出してみた。
また、解いて終わりではなくて、問題を解く中で調べたことの記録をアウトプットすることで記憶を定着させる目的もある。 - 言語化能力向上のため
→実務で人に自分がなぜこう書いたのか説明するのが苦手だな〜と思っていたので、問題を解くときに考えたことを書くことで練習できると思った。
💻対象言語
JavaScriptとJava
👀注意事項
当方実務経験1年のエンジニアなので、およそ最適とは言えない解き方をしているという自覚はありますので、温かい目で見守っていただけるとありがたいです😂💦
2.💪早速解いてみる💪
・88.Merge Sorted Array
https://leetcode.com/problems/merge-sorted-array/
(問題)
与えられた引数(配列 nums1,nums2 および整数 m,n)について、
配列nums1にnums2をマージし一つの配列にして昇順に並び替える。
整数mはnums1のマージ対象要素数を、整数nはnums2の要素数をそれぞれ表す。
nums1はm+n数分の要素を持っている。
(考え方①)
nums1の要素数がmより多ければ、インデックスm以降の要素を削除
nums1にnums2をpushして昇順に並び替える
88.js
/**
* @param {number[]} nums1
* @param {number} m
* @param {number[]} nums2
* @param {number} n
* @return {void} Do not return anything, modify nums1 in-place instead.
*/
var merge = function(nums1, m, nums2, n) {
if(nums1.length > m){
nums1.splice(m);
}
for(let i = 0; i < nums2.length; i++){
nums1.push(nums2[i]);
}
nums1.sort((a,b)=>a-b);
};
(考え方②)jsバージョンを解いた後に、nums1[m]以降をnums2の要素に取り換えちゃえばいいじゃんと気づいた!
88.java
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
for(int i = m, j = 0; j < n; i++, j++){
nums1[i] = nums2[j];
}
Arrays.sort(nums1);
}
}
よりシンプルになりました。
(学んだこと)
配列内で昇順に並び替える方法
- JavaScript
nums1.sort((a,b)=>a-b);
✍メモ b-aにすると降順になる - Java
Arrays.sort(nums1);
✍メモ Javaのsort()では昇順にしかできない。降順は一筋縄ではいかなさそうなので、またの機会に詳しく調べる(笑)