前言
注册了一个LeetCode的新号,想写题目,发现了一个LeetCode新手村。之前的号都没有碰到过,这次既然碰到了,那么就开写吧!😎(虽然题目都很简单,但是有新手村奖励啊🤪)
一、一维数组的动态和
1、题目
给你一个数组 nums
。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i])
。
请返回 nums
的动态和。
示例 1:
输入:nums = [1,2,3,4]
输出:[1,3,6,10]
解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。
示例 2:
输入:nums = [1,1,1,1,1]
输出:[1,2,3,4,5]
解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1] 。
示例 3:
输入:nums = [3,1,2,10,1]
输出:[3,4,6,16,17]
2、代码
简单的前缀和计算
class Solution { public int[] runningSum(int[] nums) { int[] sum = new int[nums.length]; sum[0] = nums[0]; for (int i = 1; i < nums.length; i++) { sum[i] += nums[i] + sum[i - 1]; } return sum; } }
二、将数字变成 0 的操作次数
1342. 将数字变成 0 的操作次数 - 力扣(Leetcode)
1、题目
给你一个非负整数 num
,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。
示例 1:
输入:num = 14
输出:6
解释:
步骤 1) 14 是偶数,除以 2 得到 7 。
步骤 2) 7 是奇数,减 1 得到 6 。
步骤 3) 6 是偶数,除以 2 得到 3 。
步骤 4) 3 是奇数,减 1 得到 2 。
步骤 5) 2 是偶数,除以 2 得到 1 。
步骤 6) 1 是奇数,减 1 得到 0 。
示例 2:
输入:num = 8
输出:4
解释:
步骤 1) 8 是偶数,除以 2 得到 4 。
步骤 2) 4 是偶数,除以 2 得到 2 。
步骤 3) 2 是偶数,除以 2 得到 1 。
步骤 4) 1 是奇数,减 1 得到 0 。
示例 3:
输入:num = 123
输出:12
2、代码
判断奇偶数
class Solution { public int numberOfSteps(int num) { int i=0; while (num!=0){ if (num%2==0) num/=2; else num-=1; i++; } return i; } }
三、最富有客户的资产总量
1672. 最富有客户的资产总量 - 力扣(Leetcode)
1、题目
给你一个 m x n
的整数网格 accounts
,其中 accounts[i][j]
是第 i
位客户在第 j
家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。
客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。
示例 1:
输入:accounts = [[1,2,3],[3,2,1]]
输出:6
解释:
第 1 位客户的资产总量 = 1 + 2 + 3 = 6
第 2 位客户的资产总量 = 3 + 2 + 1 = 6
两位客户都是最富有的,资产总量都是 6 ,所以返回 6 。
示例 2:
输入:accounts = [[1,5],[7,3],[3,5]]
输出:10
解释:
第 1 位客户的资产总量= 6
第 2 位客户的资产总量= 10
第 3 位客户的资产总量 = 8
第 2 位客户是最富有的,资产总量是 10
示例 3:
输入:accounts = [[2,8,7],[7,1,3],[1,9,5]]
输出:17
2、代码
数组求和
class Solution { public int maximumWealth(int[][] accounts) { int Max=0; for (int i=0;i<accounts.length;i++){ int sum=0; for (int j=0;j<accounts[i].length;j++){ sum+=accounts[i][j]; } Max=Math.max(Max,sum); } return Max; } }
四、Fizz Buzz
1、题目
给你一个整数 n
,找出从 1
到 n
各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中:
answer[i] == "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。
answer[i] == "Fizz" 如果 i 是 3 的倍数。
answer[i] == "Buzz" 如果 i 是 5 的倍数。
answer[i] == i
(以字符串形式)如果上述条件全不满足。
示例 1:
输入:n = 3
输出:["1","2","Fizz"]
示例 2:
输入:n = 5
输出:["1","2","Fizz","4","Buzz"]
示例 3:
输入:n = 15
输出:
["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]
2、代码
List与字符串的简单使用
class Solution { public List<String> fizzBuzz(int n) { List<String> ans = new ArrayList<>(); for (int i = 1; i <= n; i++) { String cur = ""; if (i % 3 == 0) cur += "Fizz"; if (i % 5 == 0) cur += "Buzz"; if (cur.length() == 0) cur = i + ""; ans.add(cur); } return ans; } }
五、链表的中间结点
1、题目
给你单链表的头结点 head
,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
示例 1:
输入:head = [1,2,3,4,5]
输出:[3,4,5]
解释:链表只有一个中间结点,值为 3 。
示例 2:
输入:head = [1,2,3,4,5,6]
输出:[4,5,6]
解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。
2、代码
快慢指针,快指针每次走两步,慢指针每次走一步。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode middleNode(ListNode head) { ListNode fast=head; while (fast.next!=null&&fast.next.next!=null){ head=head.next; fast=fast.next.next; } if (fast.next==null) return head; return head.next; } }
六、赎金信
1、题目
给你两个字符串:ransomNote
和 magazine
,判断 ransomNote
能不能由 magazine
里面的字符构成。
如果可以,返回 true
;否则返回 false
。
magazine
中的每个字符只能在 ransomNote
中使用一次。
示例 1:
输入:ransomNote = "a", magazine = "b"
输出:false
示例 2:
输入:ransomNote = "aa", magazine = "ab"
输出:false
示例 3:
输入:ransomNote = "aa", magazine = "aab"
输出:true
2、代码
class Solution { public boolean canConstruct(String ransomNote, String magazine) { StringBuilder r=new StringBuilder(ransomNote); StringBuilder m=new StringBuilder(magazine); for (int i=0;i<r.length();i++){ int index=m.indexOf(String.valueOf(r.charAt(i))); if (index==-1) return false; m=m.deleteCharAt(index); } return true; } }