ONE NOTE

Rage, rage against the dying of the light.

このボタンを押すと「おすと」、電源「でんげん」が入ります。

文法

  1. 小句1 と 小句2:表示小句1是小句2的条件。

    1. このボタンを押すと、電源が入ります。
    2. 食べ物を食べないと、人間は生きることができません。
    3. この道「みち」をまっすぐ行くと、テレビがあります。
  2. 动词基本形/ない形+事があります:表示有些时候会出现这种情况

  3. 形容词的副词性用法

    一类形容词二类形容词
    早いー早く上手ー上手に
    大きいー大きく静かー静かに
  4. 小句+でしょうか:比较礼貌的问法

惯用句

  1. きちんと:表示正确,无误的意思

    朝ご飯は毎日きちんと食べますか?

    部屋をきちんと片づけて「かたづけて」ください。

  2. 卓球ですか?公園で?:表示吃惊时候用这种连问。
  3. ~でできた~:口语中说用什么做成的
    1. それはプラスチックでできた箱です。
  4. ほど和ぐらい:大致的数量或者分量
    1. ここから三百メートルほど行くとスポーツセンターがあります。
  5. ただし:表示对前面的句子附加一点限制
    1. このスポーツセンターは、誰も利用することができます。ただし、有料「ゆうりょう」ですか。

今度の日曜日に遊園地「ゆうえんち」へ行くつもりです

文法

“决定”的三种情况

动词基本型「ない型」+:

  1. つもりです
    1. 已经决定,打算做某事
    2. 相当于”动词意志型+と思っています”
  2. ことにします・ことにしました
    1. 说话人自己决定某种行为
    2. しました表示决定好有一段时间了
  3. ことになりました
    1. 某种外在因素导致某个决定

      来月から給料「きゅうりょう」が上がる「あがる」ことになりました。「下月开始涨薪」

小句+そうです 传闻

馬「ば」さんの息子さんは、今年「ことし」小学校「しょうがっこう」に入学「にゅうがく」するそうです。

听说马先生儿子今年上小学。

惯用语

  1. 今度の土曜日:下次周四
  2. ボーナス:工资之外的奖金
  3. ずっど:期限内动作持续
  4. メールがあって:收到电子邮件「有邮件」
  5. って:という人は的缩略

電気を消せ「けせ」

文法

  1. 動詞命令形
动词类别基本形命令形
一类动词書く書け
急ぐ急げ
読む読め
話す話せ
二类动词食べる食べろ
見る見ろ
三类动词来るこい
するしろ
  1. 動なさい:比命令形稍微客气

質問に答えなさい

  1. 動な:禁止

ここに車を止めるな!

タバコを吸う「すう」な!

  1. 動ないで/動て:日常使用的表示请求语气,多用于亲密人之间

  2. 名词1+という+名词2

提供对方不知道的信息,翻译为那是一个/种等

それはフジという花。

田中という名前はの名前です

  1. 名词1 は 小句 という 名词2 です

このマークはタバコを吸うなという意味です

惯用语

  1. ないといけません常常省略为ないと、表示必须做某事
  2. 方をする表示用某种方式

もう十一時だから寝よう

文法

  1. 动词的意志形

意志形表示说话人的决心

动词类别基本形意志形
一类动词書くかこう
急ぐ急ごう
読む読もう
話す話そう
二类动词食べる食べよう
見る見よう
三类动词来るこよう
するしよう
  1. 意志形+と思います。表示自己的意志。
  2. 意志形式+と思っています。表示意志持续了一段时间。
  3. 小句+ので表示原因。

惯用语

  1. そろそろ:某件事快迫近时
  2. それじゃあ:那样的话
  3. まあ:不十分理想但是过得去
  4. 楽しみです

    相当于楽しみにしています,表示期盼的心情

  5. 行楽地「こうらくち」:景点
  6. ~でいっぱい:表示某个容器饱和

    この季節「きせつ」は、どの行楽地もう人でいっぱいですよ。

子供の時、大きな地震「じしん」がありました

文法

  1. 小句+時

    名詞+の時:子供の時

    動詞+時:学校へ行く時

    1形容詞「けいようし」+時:忙しい時

    2形容詞+時:暇な時

  2. 動+ながら:同一主体同时干两个动作、动词masu型去掉masu

    李さんはテレビを見ながら食事をしています。

  3. 動+ています:反复或者习惯的动作

    陽子さんはアルバイトをしながら学校に通っています。

  4. 名+で表示原因

  5. 名+と会います

表达词

  1. アルバイト:兼职打工
  2. 学校に通「かよ」っています:通います表示定期往返
  3. 大勢「おおぜい」:表示人多
  4. お年寄り「おとしより」:指代老人
  5. そう言えば:说起来
  6. へえ:惊讶

馬さんは私に地図をくれました

文法

  1. 名 は 名 に 名 を くれます。「别人给我或者我的亲人」

    小野さん、この本を私にくれますか?

  2. 動 てあげます「说话人为别人做某事」

    森さんはお年寄りの荷物を持ってあげました。

    おじさんが孫「まご」に本を読んであげました。

  3. 動 てもらいます「说话人从别人那里得到帮助」

    森さんは李さんに北京を案内「あんない」してもらいます。

    林さん、もう少し待ったもらいたいのですか?

  4. 動てくれます「其他人为说话一方的人办事」

    女の人が私の財布を拾って「ひろって」くれました。

表达词

  1. ~てあげます:有给别人恩赐的意思,只能同辈使用
  2. それに:而且
  3. ~先「さき」:表示移动性动作的到达地

    行き先:要去的地方

    出張先:出差去的地方

    旅行先:旅行目的地

  4. どの辺「へん」:询问大致场所
  5. 家具はどうしたんですか?「这里的どうしたん表示怎么购买」

これは明日会議で使う資料です

文法

动词简体形/小句 修饰名词

私が明日乗る飛行機は中国航空です

这个小句可以用来充当其他句子成分

中国で買ったシーディーを友達に貸しました

这个名词小句中的主语不用は而用が,如:

知らない人から

小句(一类形/二类形/名)+名词

入口が広いあの建物が私の会社です。「一类基本型+名词」

操作「そうさ」が簡単なパソコンが欲しいです「二类+な+名词」

表达词

  1. ~のところ:在~那儿,表示场所
  2. ~でしたね:表示确认
  3. 大きな&小さな:只能修饰名词
  4. ~あたり:某地一带,附近

自転車に二人で乗るのは危ないです

文法

  1. 动词小句+の,使其名词化「形式体言」,这个名词化也能当宾语

    自転車に二人で乗るのは危ないです

    パソコンで表を作るのは楽しいです

    手紙を出すのを忘れました「宾语」

    李さんは小野さんが料理を作るのを手伝い「てつだい」ます「宾语」

    作宾语时候,の和こと可以互换

  2. 小句+でしょう、表示推测。

  3. 小句+かもしれません、可能发生某事

表达词

  1. もしかしたら:可能性较低,口语使用
  2. それで:前面的事情是后面的原因,相当于”因此”.
  3. つい:并非有意形成某种后果,包含后悔的语感。

    バーゲン会場では、つい何でも買いたくなります。

  4. 挨拶回り「あいさつまわり」:到了新地方拜访邻居的行为

日本語翻訳意味
パンご飯を食べます吃饭或者面包或者
李さん花をあげました给了小李花给予
李さんは私花をくれました小李给我花给予(别人对自己)
李さん花をもらいました从小李那里收到了花获得(我从别人那里)
会社からプレゼントをもらいました收到公司的礼物获得(我从别人那里)
店で野菜果物**など「等」**を買いました店里买了水果等等不完全列举
日本は中国ほど広くないです日本不如中国大不如(后接否定)
今日、早く帰らなけらばなりません今天必须早点回必须
明日、残業しなくてもいいです明天不加班也可以可以不
私の趣味は切手を集めいることです我的兴趣是收集邮票表达兴趣
週末、家を掃除したり、洗濯したりします周末打扫卫生啦,洗衣服啦举例
日本へ行くかどうか分かりません不知道是否去日本不确定
陳さんはパーティーに行くと言いました陈说了要去party引述
テレビを見ながらご飯を食べます一边看电视一边吃饭同时
冷蔵庫には卵は一つだけです冰箱只有一个鸡蛋只是,只有
教室には二人しかいません教室只有两个人只有(后接否定)

ref

日语初级N5核心语法70条

一共4题,第一题简单,第二题一般,第三四题困难

多少天回本(简单)

买个月卡需要m块,登陆一天送n块,求多少天回本

1
return parseInt((m + n - 1) / n);

最大分割和(一般)

对一个n位的十进制数进行分割,分割后每个数不能大于99,求分割后的最大值

如:12345 -> 1 + 23 + 45 = 69

思路

  1. 使用动态规划思想
  2. dp[i]表示str[0]到str[i]所能分割的最大和
  3. 状态转移方程
    1
    2
    3
    4
    dp[i] = max(
    dp[i - 1] + parseInt(str.slice(i, i + 1)),
    dp[i - 2] + parseInt(str.slice(i - 1, i + 1)),
    );
  4. 初始状态dp[0]=parseInt(str.slice(0, 1)), dp[1]=parseInt(str.slice(0, 2))

code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

const fn = (str) => {
const l = str.length;
if (l <= 2) {
return parseInt(str);
}

const dp = [parseInt(str.slice(0, 1)), parseInt(str.slice(0, 2))];
for (let i = 2; i < l; i++) {
let best = Math.max(
dp[i - 1] + parseInt(str.slice(i, i + 1)),
dp[i - 2] + parseInt(str.slice(i - 1, i + 1)),
);
dp.push(best);
}
return dp.at(-1);
};

void (async function () {
// Write your code here
let str = await readline();
console.log(fn(str));
process.exit(0);
})();

第一题:求最大步数

整数数组nums与整数k,从下标0开始,每次可以从i向后移动到j,满足abs(nums[i]-nums[j])<=k,求最大步数

解法:回溯算法,用path记录下标路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class Solution {
/* Write Code Here */
// 回溯算法 path为路径
maximumSteps(nums, k) {
this.nums = nums;
this.k = k;
this.maxStep = -1;
const path = [0];
this.fn(path);
return this.maxStep;
}

fn(path) {
// 终点加入结果
if (path.at(-1) === this.nums.length - 1) {
this.maxStep = Math.max(this.maxStep, path.length - 1);
// console.log(path)
return;
}

for (let i = path.at(-1) + 1; i < this.nums.length; i++) {
if (Math.abs(this.nums[i] - this.nums[path.at(-1)]) <= this.k) {
path.push(i);
this.fn(path);
path.pop();
}
}
}
}
let res;

let nums_size = readInt();

let nums = new Array();
let nums_item;
for (let nums_i = 0; nums_i < nums_size; nums_i++) {
nums.push(readInt());
}
let k = readInt();
let acmSolution = new Solution();
res = acmSolution.maximumSteps(nums, k);
print(res);

按理说没有什么特殊情况了,但是测试通过只有55%。

第二题:求众数

一个整数数组nums与整数k,数组每个元素nums[i]都可以在[nums[i]-k, nums[i]+k]内进行一次变化,返回数组变化后最大的众数

解法:暴力解法,遍历每个元素,计算整个数组满足Math.abs(nums[i] - nums[j]) <= k的个数,求最大值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
/* Write Code Here */
maximumOccurrences(nums, k) {
let maxnum = 1;
// nums.sort();
for (let i = 0; i < nums.length; i++) {
let curnum = 0;
for (let j = 0; j < nums.length; j++) {
if (Math.abs(nums[i] - nums[j]) <= k) {
curnum++;
}
}
maxnum = Math.max(curnum, maxnum);
}
return maxnum;
}
}
let res;

let nums_size = readInt();

let nums = new Array();
let nums_item;
for (let nums_i = 0; nums_i < nums_size; nums_i++) {
nums.push(readInt());
}
let k = readInt();
let acmSolution = new Solution();
res = acmSolution.maximumOccurrences(nums, k);
print(res);

通过率88%,其他的兴许是超时了。

总结

这次算法题挺简单,都算是力扣中等难度。

虽然牛客是acm模式,但是提前写好了IO处理,好评!