您现在的位置是:首页 >技术杂谈 >LeetCode——新手村网站首页技术杂谈
LeetCode——新手村
目录
前言
注册了一个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;
}
}