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

力扣.H指数力扣.字母异位词力扣.289生命游戏力扣452.用最小数量的箭引爆气球力扣.86分隔链表力扣.轮转数组

目录

^判断是否两边相同

short类型

思维:语义化,借助常量

力扣.H指数

力扣.字母异位词

力扣.289生命游戏

力扣.86分隔链表


^判断是否两边相同

byte一个字节8位

short类型

  • 大小short类型占用2个字节(16位)的内存空间。

int:

  • 大小int类型占用4个字节(32位)的内存空间。

long:8个字节 64位

  •   大小:long类型占用8字节(64位)内存空间

float:32位

double:64位

3.4默认是double类型,不能给float赋值

char的底层是unicode,unicode是包含中文的

&&和&的区别,

&&左边得到结果,不会计算右边

&不论左边如何,都会计算右边

标识符:

字母,数字,下划线,美元符号

首位不能是数字

区分大小写

不能是关键字和保留字、首位不可以是数字,区分大小写

变量,数据类型,运算:变量和常量,标识符,编码规范

三元: ?   :

两个数字n,m

假如交换可以进行n+m,然后操作n-m,m-n之类的操作。

二进制:

对于数据的保存都是采用二进制

规则:0,1

<<左移n位,等价乘以2的n次幂

>>,>>>右移,无符号右移,等价除以2的n次幂a

switch支持的数据类型,int,byte,short,char String,enum

case后面跟常量,必须是唯一常量

switch中break作用的中断,假如不去中断,则后面不会进行判断,而是一直去执行

思维:语义化,借助常量

比如定义男女

使用boolean

开始先用两个常量 

final boolean MAN=true;
final boolean WOMAN=false;

后面定义的时候,就可以比如boolean a=MAN;作为这个语义化

8个小球,一个比较重,其余一样,如何称两次找到重的

分为3,3,2组,把3个,3个两个比较,哪个重,其余就容易

一个5L杯子,一个3L杯子,怎么称4L的水

5L倒满,给3L,此时还剩2L,然后把3L杯子水倒没,把2L给3L水杯,之后,5L加满,给3L直到填满,此时剩4L. 

力扣.H指数

class Solution {public int hIndex(int[] citations) {int h=0;int n=citations.length;Arrays.sort(citations);// 0,0,0,1,2,3,5,6h=0;int i=n-1;while(i>=0&&citations[i]>h){//假如cit[i]当前位置比h大,就说明当前位置至少是H+1次,所以,需要h进行++;h++;i--;}return h;}
}

力扣.字母异位词

这个我思路是不明确的,想到了排序,但是假如我写,肯定没有这么便捷,

他的思路是,不管你什么异位词,我排序之后,你的所有异位词长的都是一个样子,所以我只需要让你所有的都进行排序,拿排序好的那个,作为key,因为假如是异位词,他排序之后的单词应该是一致的,因此这个作为key,然后List来去存储。

class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String,List<String>>map=new HashMap<String,List<String>>();for(int i=0;i<strs.length;i++){char[]array=strs[i];Arrays.sort(array);String key=new String(array);//不用判断是否相同,get(获取这个key)假如获取到了就返回,没获取到就new一个,反正这个一定是属于这个字符串的List<String>list=map.getOrDefault(key,new ArrayList<String>);list.add(strs[i]);map.put(key,list);}}
}

力扣.289生命游戏

这个生命游戏是很牛马的一个题目,俺以为他会一直变化,没想到只变化一层,他是一层之后,我们进行第一层,然后根据前面的那些变化,为什么要设置2和-1这俩个状态表示原先死了变活和原先活着变死了,是因为我们更改的同时,需要的是第一波的状态,我们需要得到原先是0还是1,其余就是正常了。

class Solution {public void gameOfLife(int[][] board) {int[] neighbors = {0, 1, -1};int rows = board.length;int cols = board[0].length;// 遍历面板每一个格子里的细胞for (int row = 0; row < rows; row++) {for (int col = 0; col < cols; col++) {// 对于每一个细胞统计其八个相邻位置里的活细胞数量int liveNeighbors = 0;for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {
//0,1,-1if (!(neighbors[i] == 0 && neighbors[j] == 0)) {// 相邻位置的坐标int r = (row + neighbors[i]);int c = (col + neighbors[j]);
//这步之前是来统计当前坐标的8个方位,然后把这个点除了本身,全部给处理掉,每个点都统计一下//-1表示过去是活的,现在死了,2表示过去死了,现在活了//r和c要在合法范围内     查看相邻的细胞是否是活细胞if ((r < rows && r >= 0) && (c < cols && c >= 0) && (Math.abs(board[r][c]) == 1)) {liveNeighbors += 1;}}}}// 规则 1 或规则 3 if ((board[row][col] == 1) && (liveNeighbors < 2 || liveNeighbors > 3)) {// -1 代表这个细胞过去是活的现在死了board[row][col] = -1;}// 规则 4if (board[row][col] == 0 && liveNeighbors == 3) {// 2 代表这个细胞过去是死的现在活了board[row][col] = 2;}}}// 遍历 board 得到一次更新后的状态for (int row = 0; row < rows; row++) {for (int col = 0; col < cols; col++) {if (board[row][col] > 0) {board[row][col] = 1;} else {board[row][col] = 0;}}}}
}

力扣.86分隔链表

链表多多利用头节点,要舍得定义变量。

/*** 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 partition(ListNode head, int x) {ListNode preHead = new ListNode();preHead.next = head;ListNode cur = head;// 4,3,2,5,2    此时没有找到我的preListNode pre = preHead;ListNode key = head;while (cur != null) {if (cur.val >= x) {key = cur;cur = cur.next;break;}pre = cur;cur = cur.next;}//相当于找到了所有比他小的节点的后一个节点,我此时还需一个比他小的节点的前一个节点ListNode Precur=key;//此时比他小的开头节点是pre,比他大的节点是key,我只需要往下找,假如比他小的,插入二者之间即可 1243while (cur != null) {if (cur.val < x) {ListNode next = cur.next;pre.next = cur;cur.next = key;pre = pre.next;Precur.next=next;cur = next;} else {Precur=cur;cur = cur.next;}}return preHead.next;}
}

http://www.xdnf.cn/news/588151.html

相关文章:

  • 高等数学-常微分方程
  • 国产三维CAD皇冠CAD(CrownCAD)建模教程:交流发电机
  • 推荐一个Excel与实体映射导入导出的C#开源库
  • 手写简单的tomcat
  • (泛函分析)线性算子连续必有界的证明
  • GraphRAG使用
  • 动态规划(七)——子数组系列(求和问题)
  • labview实现将百分制分数转换为等级制分数
  • Vue 3 官方 Hooks 的用法与实现原理
  • ai外呼平台:AnKo打造高效多模型服务体验!
  • labview实现LED流水灯的第二种方法
  • 每日算法刷题计划day13 5.22:leetcode不定长滑动窗口最短/最小1道题+求子数组个数越长越合法2道题,用时1h
  • 学习vue3:跨组件通信(provide+inject)
  • vscode include总是报错
  • Ubuntu24.04 LTS安装java8、mysql8.0
  • 【VScode】python初学者的有力工具
  • Labview使用报表工具
  • linux二进制安装mysql:
  • 遥控器处理器与光纤通信技术解析
  • 深入理解指针part1
  • 【Django ORM】三万字了解Django ORM的基本概念和基本使用
  • 并发编程之并发协同工具类
  • ollama+open-webui搭建可视化大模型聊天
  • 【计算机网络】TCP如何保障传输可靠性_笔记
  • Python结合ollama和stramlit开发聊天机器人
  • 栈和队列总结
  • ISO 26262-5 生产维护和报废
  • 前端性能优化的秘密武器:Preload 与 Prefetch 的深度解析
  • fatal error: uuid/uuid.h: No such file or directory 编译问题修复。
  • VS Code中Maven未能正确读取`settings.xml`中配置的新路径