刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。
455、分发饼干

class Solution {
public int count;
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
count = 0;
int indexS = 0;
int indexG = 0;
while(indexS < s.length && indexG < g.length){
if(s[indexS] >= g[indexG]){
count++;
indexG++;
indexS++;
}else{
indexS++;
}
}
return count;
}
}
376、摆动序列

class Solution {
public int wiggleMaxLength(int[] nums) {
if(nums.length <= 1){
return nums.length;
}
int pre = 0;
int cur = 0;
int count = 1;
for(int i = 1; i < nums.length; i++){
cur = nums[i] - nums[i - 1];
if((cur > 0 && pre <= 0) || (cur < 0 && pre >= 0)){
count++;
pre = cur;
}
}
return count;
}
}
53、最大子数组和

class Solution {
public int maxSubArray(int[] nums) {
if(nums.length == 1){
return nums[0];
}
int count = 0;
int sum = Integer.MIN_VALUE;
for(int i = 0; i < nums.length; i++){
count += nums[i];
sum = Math.max(sum, count);
if(count <= 0){
count = 0;
}
}
return sum;
}
}
122、买卖股票的最佳时机 II

class Solution {
public int maxProfit(int[] prices) {
int max = 0;
for(int i = 1; i < prices.length; i++){
if(prices[i] > prices[i - 1]){
max += prices[i] - prices[i - 1];
}
}
return max;
}
}
55、跳跃游戏

class Solution {
public boolean canJump(int[] nums) {
if(nums.length == 1){
return true;
}
int coverMax = 0;
for(int i = 0; i <= coverMax; i++){//防止中途就出现覆盖范围中断
coverMax = Math.max(coverMax, i + nums[i]);
if(coverMax >= nums.length - 1){
return true;
}
}
return false;
}
}
45、跳跃游戏 II

class Solution {
public int jump(int[] nums) {
int count = 0;
if(nums.length == 1){
return count;
}
// 当前覆盖范围
int coverMax = 0;
// 最大覆盖范围
int maxCover = 0;
for(int i = 0; i < nums.length; i++){
// 更新在当前覆盖范围内的最大覆盖范围(下一步可以跳到的最大范围)
maxCover = Math.max(nums[i] + i, maxCover);
// 再跳一步就可以到达
if(maxCover >= nums.length - 1){
count++;
break;
}
// 到达当前覆盖范围最大值,需要下一跳
if(i == coverMax){
count++;
coverMax = maxCover;
}
}
return count;
}
}
1005、K 次取反后最大化的数组和

class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
Arrays.sort(nums);
int index = 0;
for(int i = 0; i < k; i++){
if(i < nums.length - 1 && nums[index] < 0){
nums[index] = -nums[index];
if(nums[index] >= Math.abs(nums[index + 1])){
index++;
}
continue;
}
nums[index] = -nums[index];
}
int sum = 0;
for(int j = 0; j < nums.length; j++){
sum += nums[j];
}
return sum;
}
}
134、加油站

class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int[] arr = new int[gas.length];
int sum = 0;
int curSum = 0;
int index = 0;
for(int i = 0; i < arr.length; i++){
arr[i] = gas[i] - cost[i];
sum += arr[i];
curSum += arr[i];
if(curSum < 0){
index = (i + 1)%arr.length;
curSum = 0;
}
}
if(sum >= 0){
return index;
}else{
return -1;
}
}
}
135、分发糖果

class Solution {
public int candy(int[] ratings) {
// 最少糖果数目
int[] arrResult = new int[ratings.length];
arrResult[0] = 1;
for(int i = 1; i < ratings.length; i++){
arrResult[i] = ratings[i] > ratings[i - 1] ? arrResult[i - 1] + 1 : 1;
}
for(int i = ratings.length - 2; i >= 0; i--){
if(ratings[i] > ratings[i + 1]){
arrResult[i] = Math.max(arrResult[i],arrResult[i + 1] + 1);
}
}
int sum = 0;
for(int j = 0; j < arrResult.length; j++){
sum += arrResult[j];
}
return sum;
}
}
860、柠檬水找零

class Solution {
public boolean lemonadeChange(int[] bills) {
if(bills[0] != 5){
return false;
}
if(bills.length == 1){
return true;
}
List<Integer> money = new LinkedList<>();
money.add(5);
for(int i = 1; i < bills.length; i++){
if(bills[i] == 5){
money.add(5);
}else if(bills[i] == 10){
if(!money.contains(5)){
return false;
}
money.add(10);
money.remove(new Integer(5));
}else if(bills[i] == 20){
if(money.contains(5) && money.contains(10)){
money.add(20);
money.remove(new Integer(5));
money.remove(new Integer(10));
}else if(money.contains(5)){
for(int j = 0; j < 3; j++){
if(!money.contains(5)){
return false;
}
money.remove(new Integer(5));
}
money.add(20);
}else{
return false;
}
}
}
return true;
}
}
406、根据身高重建队列

class Solution {
public int[][] reconstructQueue(int[][] people) {
Arrays.sort(people,(a,b)->{//对数组进行排序
if(a[0]==b[0]) return a[1] - b[1];
return b[0] - a[0];
});
List<int[]> queue = new LinkedList<>();
for(int[] p: people){
queue.add(p[1],p);
}
return queue.toArray(new int[people.length][]);
}
}
452、用最少数量的箭引爆气球

class Solution {
public int findMinArrowShots(int[][] points) {
Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));
int count = 1;
for(int i = 1; i < points.length; i++){
if(points[i][0] > points[i-1][1]){
count++;
}else{
points[i][1] = Math.min(points[i-1][1],points[i][1]);
}
}
return count;
}
}
435、 无重叠区间

class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
Arrays.sort(intervals,(a,b)->{
if(a[0]==b[0])return a[1]-b[1];
return a[0]-b[0];
});
int resultCount = 0;
int right = intervals[0][1];
for(int i = 1; i < intervals.length; i++){
if(intervals[i][0] < right){
resultCount++;
if(intervals[i][1] < right){
right = intervals[i][1];
}
}else{
right = intervals[i][1];
}
}
return resultCount;
}
}
763、划分字母区间

class Solution {
public List<Integer> partitionLabels(String s) {
List<Integer> list = new ArrayList<>();
char[] arr = s.toCharArray();
int index = 0;
int start = 0;
int left = 0;
int right = arr.length - 1;
while(start<arr.length){
while(left <= index){
if(arr[left] != arr[right]){
// left++;
right--;
}else{
index = Math.max(index,right);
left++;
right = arr.length-1;
}
}
list.add(index-start+1);
index=index+1;
start=index;
left=index;
right = arr.length-1;
}
return list;
}
}
56、合并区间

class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals,(a,b)->{
if(a[0]==b[0])return a[1]-b[1];
return a[0]-b[0];
});
List<int[]> result = new LinkedList<>();
int right = intervals[0][1];
int left = intervals[0][0];
int count = 1;
for(int i = 1; i < intervals.length; i++){
if(intervals[i][0]<=right){
right = Math.max(right,intervals[i][1]);
}else{
result.add(new int[]{left,right});
left=intervals[i][0];
right=intervals[i][1];
count++;
}
}
result.add(new int[]{left,right});
return result.toArray(new int[count][]);
}
}
738、单调递增的数字

class Solution {
public int monotoneIncreasingDigits(int n) {
String str = String.valueOf(n);
char[] arr = str.toCharArray();
int start = arr.length;
for(int i = arr.length - 2; i >= 0; i--){
if(arr[i] > arr[i+1]){
arr[i]--;//字符减一的方法
start = i+1;
}
}
for(int j = start; j<arr.length; j++){
arr[j]='9';
}
return Integer.parseInt(String.valueOf(arr));
}
}
714、买卖股票的最佳时机含手续费

class Solution {
public int maxProfit(int[] prices, int fee) {
if(prices.length==1){
return 0;
}
int index = prices[0]+fee;
int sum=0;
for(int i = 1; i < prices.length; i++){
if(prices[i]>index){
sum+=prices[i]-index;
index=prices[i];
}else if(prices[i]+fee<index){
index=prices[i]+fee;
}
}
return sum;
}
}
968、监控二叉树

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
int res=0;
public int minCameraCover(TreeNode root) {
// 对根节点的状态做检验,防止根节点是无覆盖状态 .
if(minCame(root)==0){
res++;
}
return res;
}
/**
节点的状态值:
0 表示无覆盖
1 表示 有摄像头
2 表示有覆盖
后序遍历,根据左右节点的情况,来判读 自己的状态
*/
public int minCame(TreeNode root){
if(root==null){
// 空节点默认为 有覆盖状态,避免在叶子节点上放摄像头
return 2;
}
int left=minCame(root.left);
int right=minCame(root.right);
// 如果左右节点都覆盖了的话, 那么本节点的状态就应该是无覆盖,没有摄像头
if(left==2&&right==2){
//(2,2)
return 0;
}else if(left==0||right==0){
// 左右节点都是无覆盖状态,那 根节点此时应该放一个摄像头
// (0,0) (0,1) (0,2) (1,0) (2,0)
// 状态值为 1 摄像头数 ++;
res++;
return 1;
}else{
// 左右节点的 状态为 (1,1) (1,2) (2,1) 也就是左右节点至少存在 1个摄像头,
// 那么本节点就是处于被覆盖状态
return 2;
}
}
}
ValidPalindromeGivenastring,determineifitisapalindrome,consideringonlyalphanumericcharactersandignoringcases. [#125]Example:"Aman,aplan,acanal:Panama"isapalindrome."raceacar"isnotapalindrome.Haveyouconsiderthatthestringmightbeempty?Thisisagoodquestiontoaskduringaninterview.Forthepurposeofthisproblem
前言我们习惯用idea编写、调试代码,在LeetCode上刷题时,如果能够在IDEA编写代码,并且做好代码管理,是一件事半功倍的事情。对于后续复习题目,做笔记也会非常便利。本文目的在于介绍LeetCodeEditor的使用,以及配置工具类,最终目录结构如下:note:放置笔记src:放置代码leetcode.editor.cn:插件LeetCodeEditor自动生成utils:自定义的工具包,可用于自动化输入测试用例,定义题目需要的类(结构体)out:运行测试时自动生成LeetCodeEditorGitHub:https://github.com/shuzijun/leetcode-edit
一、题目给你一个整数数组ranks和一个字符数组suit。你有5张扑克牌,第i张牌大小为ranks[i],花色为suits[i]。下述是从好到坏你可能持有的手牌类型:“Flush”:同花,五张相同花色的扑克牌。“ThreeofaKind”:三条,有3张大小相同的扑克牌。“Pair”:对子,两张大小一样的扑克牌。“HighCard”:高牌,五张大小互不相同的扑克牌。请你返回一个字符串,表示给定的5张牌中,你能组成的最好手牌类型。注意:返回的字符串大小写需与题目描述相同。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/best-poker-hand/d
一.面试总结 4月20号下午进行了一场大数据视频面试,总结一下踩坑点: 1.确定面试后,第一件事要和HR确定面试方式,具体时间、地点、什么软件、岗位JD等必须信息。 这里很多人有一个思想误区,认为问的太多会给HR不好的印象;其实大可不必,如果你通过了简历筛选,你就有权力使用公司招聘的人力资源。 2.要在面试10分钟前就进入面试的环境中,以防突发事件。 3.面试最开始都会有一个自我介绍环节,这个自我介绍环节,一定要慎之又慎,最好写下来,让朋友、长辈等审核多遍。 注:我面试时,在这踩了一个坑,自我介绍的时候踩了我要面试的岗位一脚,被技术面试官抓住了这一点
🍎道阻且长,行则将至。🍓🌻算法,不如说它是一种思考方式🍀算法专栏:👉🏻123一、🌱344.反转字符串题目描述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。来源:力扣(LeetCode)难度:简单提示:1s[i]都是ASCII码表中的可打印字符示例1:输入:s=[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例2:输入:s=[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”,“H”
数据规模->时间复杂度10^8内容二维数组中的路径问题买卖股票的最佳时机lc62【剑指098】【top100】:不同路径https://leetcode.cn/problems/unique-paths/提示:1题目数据保证答案小于等于2*10^9#方案一:dfs+记忆化classSolution:defuniquePaths(self,m:int,n:int)->int:memo=[[-1]*nfor_inrange(m)]defdfs(i,j):ifi==m-1andj==n-1:return1ifi>=morj>=n:return0ifmemo[i][j]!=-1:returnmemo[
Ⅰ验证是否注入点 从下面的注入测试来看,只有两种输出结果 如果sql执行了,就会输出“Youarein…Useoutfile…”,反之输入“YouhaveanerrorinyourSQLsyntax”?id=1--+--Youarein....Useoutfile......?id=1'--+--YouhaveanerrorinyourSQLsyntax?id=-1'--+--YouhaveanerrorinyourSQLsyntax?id=1\--+--Youarein....Useoutfile......查看是否存在双引号注入正常输出,说明有执行,存在双引号注入?id=1"--+--
7Vue37.1了解Vue3vue3官网地址https://cn.vuejs.org/vue3发布时间2020年9月18日。翻译:今天,我们很自豪地宣布Vue.js3.0“海贼王”正式发布。这个新的主要版本的框架提供了改进的性能、更小的捆绑包大小、更好的TypeScript集成、用于处理大规模用例的新API,以及为框架未来的长期迭代奠定了坚实的基础。3.0版本代表了两年多的开发工作,包括30多个RFC、2600多个提交、来自99个贡献者的628个拉取请求,以及核心回购之外的大量开发和文档工作。我们要向我们的团队成员表示最深切的感谢,感谢他们接受了这一挑战,感谢我们提出的撤回请求,感谢我们的赞助
🍎道阻且长,行则将至。🍓🌻算法,不如说它是一种思考方式🍀算法专栏:👉🏻123hash是什么,哈希表为什么叫哈希表?一、🌱454.四数相加II题目描述:给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i,j,k,l)能满足:0nums1[i]+nums2[j]+nums3[k]+nums4[l]==0来源:力扣(LeetCode)难度:中等提示:n==nums1.lengthn==nums2.lengthn==nums3.lengthn==nums4.length1-2^28示例1:输入:nums1=[1,2],nums2=[-2,-1],n
Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法......感兴趣就关注我吧!你定不会失望。🌈个人主页:主页链接🌈算法专栏:专栏链接 我会一直往里填充内容哒!🌈LeetCode专栏:专栏链接 目前在刷初级算法的LeetBook。若每日一题当中有力所能及的题目,也会当天做完发出🌈代码仓库:Gitee链接🌈点击关注=收获更多优质内容🌈目录题目:111. 二叉树的最小深度题解:代码实现:题目:700. 二叉搜索树中的搜索题解:代码实现:题目:701. 二叉搜索树中的插入操作题解:代码实现:题目:450. 删除二叉搜索树中的节点题解:代码实现:完结撒花:人生苦短,