当前位置: 首页 > news >正文

leetcode

文章目录

  • 0914 算法题
    • leetcode 179 最大数
    • leetcode nums数组两个数字和为target
    • 排序复习
      • 冒泡
      • 快速排序
      • 堆排序
    • 牛客 DP18 滑雪

0914 算法题

leetcode 179 最大数

给定一个nums数组,请重新排列每个数的顺序,使得其排列组成一个最大的数
主要熟悉冒泡排序、String的compareTo函数,它是从高位到低位逐位比较大小。
还有处理00这种情况

import java.util.*;
import java.lang.*;
class Solution {public String largestNumber(int[] nums) {// 冒泡int left=0;int temp=0;for(int i=0;i<nums.length-1;i++){for(int j=nums.length-1;j>left;j--){// j 大于 j-1if(((""+nums[j]+nums[j-1]).compareTo(""+nums[j-1]+nums[j]))>0){temp=nums[j];nums[j]=nums[j-1];nums[j-1]=temp;}}}StringBuilder result=new StringBuilder("");for(int i=0;i<nums.length;i++){result.append(nums[i]);}//00if(result.substring(0,1).equals("0")){return "0";}return result.toString();}
}

leetcode nums数组两个数字和为target

1遍历数组,向后查找是否有与当前下标数和为target的。为了加速查找,可以先排序,在进行查找。时间复杂度为O(nlogn)
2使用hash表存储nums[i],每次遍历到一个元素,检索hash表中是否有target-nums[i],如果有则返回该匹配的结果,否则将其放入hash表中。时间复杂度为O(n),空间复杂度为O(n)。
判断某个值存不存在,一般都有空间换时间的替代解法,使用hashMap,set等。本题是判断target-num[i]是否存在。

排序复习

冒泡

for(int i=0;i<nums.length;i++)
{int left=0;int temp=0;for(int j=nums.length-1;j>left;j--){temp=nums[j];nums[j]=nums[j-1];nums[j-1]=temp;}
}

快速排序

#使用了nums[left]作为划分界限,并从nums[left+1]开始排序,最终再把nums[left]和nums[j]交换。void quicksort(int[] nums,int left,int right)
{<!-- 划分 -->int i=left;int j=right+1;int temp=0;while(true){while(nums[++i]<nums[left] & i<right);while(nums[--j]>nums[left]);if(i>=j){break;}temp=nums[i];nums[i]=nums[j];nums[j]=temp;}temp=nums[left];nums[left]=nums[j];nums[j]=temp;quicksort(nums,left,j);quicksort(nums,j+1,right);
}

堆排序

#java 用优先队列实现
#默认是小根堆
PriorityQueue<Integer> queue = new PriorityQueue<>();# 大根堆
PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2.compareTo(o1);}
});#简化写法
PriorityQueue<Integer> queue = new PriorityQueue<>((o1, o2)->o2.compareTo(o1));
Queue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder());queue.offer(12);
queue.poll();

牛客 DP18 滑雪

动态规划 极值类型,求出得到极值的path。这题关键点是确定起点和计算方向,起点是最低的点,计算方向是按照高度增加。

import java.util.*;//     
class HeightAxis{public int height;public int i;public int j;public  HeightAxis(int height,int i,int j){this.height=height;this.i=i;this.j=j;}
}public class Main{
//     选出最长的路径,状态值为当前的max长度,依赖为取决于三个方向。起始点为当一个点的四周没有比他低的(排除来路),其max=0。如何取到所有滑道。public static void main(String[] args){Scanner scanner=new Scanner(System.in);int n=0;int m=0;n=scanner.nextInt();m=scanner.nextInt();PriorityQueue<HeightAxis> heightQueue=heightQueue=new PriorityQueue<HeightAxis>((o1,o2)->(o1.height-o2.height));;int [][] matrix=new int[n][m];for(int i=0;i<n;i++){for(int j=0;j<m;j++){matrix[i][j]=scanner.nextInt();HeightAxis h=new HeightAxis(matrix[i][j],i,j);heightQueue.offer(h);}}Main.answer(matrix,n,m,heightQueue);}public static void answer(int [][] matrix,int n,int m,PriorityQueue<HeightAxis> heightQueue){int [] [] dp=new int [n][m];int maxResult=Integer.MIN_VALUE;while(heightQueue.size()>0){    HeightAxis h=heightQueue.poll();int i=h.i;int j=h.j;int max=1;if(i-1>=0 && matrix[i][j]>matrix[i-1][j]){max=(dp[i-1][j]+1)>max?(dp[i-1][j]+1):max;}if(i+1<n && matrix[i][j]>matrix[i+1][j]){max=(dp[i+1][j]+1)>max?(dp[i+1][j]+1):max;}if(j-1>=0 && matrix[i][j]>matrix[i][j-1]){max=(dp[i][j-1]+1)>max?(dp[i][j-1]+1):max;}if(j+1<m && matrix[i][j]>matrix[i][j+1]){max=(dp[i][j+1]+1)>max?(dp[i][j+1]+1):max;}dp[i][j]=max;  maxResult=max>maxResult?max:maxResult;}System.out.println(maxResult);
//     max}
}

相关文章:

  • v-md-editor高级使用之自定义目录
  • SpringBoot 3.0 升级之 Swagger 升级
  • 鸿蒙小车之多任务调度实验
  • jetpack compose 学习(2)
  • Linux操作系统:开源的计算机革命
  • Ray RLlib User Guides:模型,处理器和动作分布
  • Java之方法引用
  • MySQL事务与MVCC详解
  • LeetCode Hot100 25.K个一组翻转链表
  • AI日报:麻省理工学院专家呼吁扩大人工智能治理和监管
  • Verilog Systemverilog define宏定义
  • web前端之中文输入法导致的高频事件、addEventListener、compositionstart、compositionend
  • HPM6750系列--第九篇 GPIO详解(基本操作)
  • Github与Gitlab
  • CentOS 7 部署 dnsmasq
  • SegmentFault for Android 3.0 发布
  • Codepen 每日精选(2018-3-25)
  • Nodejs和JavaWeb协助开发
  • nodejs实现webservice问题总结
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Redux系列x:源码分析
  • STAR法则
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 测试开发系类之接口自动化测试
  • 程序员该如何有效的找工作?
  • 多线程事务回滚
  • 飞驰在Mesos的涡轮引擎上
  • 关于使用markdown的方法(引自CSDN教程)
  • 前端攻城师
  • 前言-如何学习区块链
  • 驱动程序原理
  • 数据仓库的几种建模方法
  • 一个项目push到多个远程Git仓库
  • 7行Python代码的人脸识别
  • Hibernate主键生成策略及选择
  • 带你开发类似Pokemon Go的AR游戏
  • ​Python 3 新特性:类型注解
  • #《AI中文版》V3 第 1 章 概述
  • #HarmonyOS:Web组件的使用
  • (C++17) optional的使用
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (二)学习JVM —— 垃圾回收机制
  • (分类)KNN算法- 参数调优
  • (接口自动化)Python3操作MySQL数据库
  • (一)基于IDEA的JAVA基础10
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (转载)虚函数剖析
  • .CSS-hover 的解释
  • .gitattributes 文件
  • .Net - 类的介绍
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Framework 服务实现监控可观测性最佳实践
  • .netcore如何运行环境安装到Linux服务器