leetcode java算法编程的一些技巧

前言

虽然我们平时用Java 用的比较多,做技术做的也比较不错,但完全要你用语言来写一些东西,你还是会懵逼,因为我们平时都是用IDEA智能提示,可能一个提示,代码就自动写完了,所以,当你用Java 来写一些算法题的实现,有可能你记不起一些语法来。本文来帮你加强编写代码的能力。

1、数组

数组的特性就是直接根据下标来获取数据,在算法题中很多输入都是数组,那么:

  • 如何获取数组长度?
int h = height.length

不带括号哦,记不住就很晕

  • 新建数组
		int[] tmp = new int[arr.length];    //新建一个临时数组存放

2、链表

  • 不需要按照写项目代码那样按部就班
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode first = head;
        ListNode last = head;
        for (int i=0;i

此代码里用到里内部类,就不需要写get、set方法,直接访问内部变量。

3、字符串

  • (1)字符串长度
    s.length()

  • (2)根据坐标 获得字符
    s.charAt(i) , i 是坐标

  • (3)根据坐标截断 字符
    s.substring(sta,end) :不包括end 坐标字符

  • (4)char 转数字
    int num = (int)ch - (int)(‘0’);
    int num = cha - ‘0’
    直接与字符“0”相减也可以得到。

4、输入输出

我们经常会碰到输入一个数字,然后输出一个数组,代码如下:

       Scanner sc = new Scanner(System.in);
       int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }

技巧汇总

  • 1、利用math 函数
Math.min(a,b)
Math.max(a,b)

虽然三目运算符可以替代这个效果,但是代码可读性不好。

  • 2、链表头节点问题
    一般给的都是1 -> 2 -> 3 -> 4 ,这样的顺序没有头节点,写代码的时候如果你需要头节点,就给他一个头节点,比如:
ListNode dummy = new ListNode(0);   //  生成一个新节点
dummy.next = head;     //  头节点指向下一个节点

这样放方便你避免一些异常情况。

  • 3、交换操作踩坑
 private void swap(int[] arr, int i, int j) {
        if (i==j) {return;}
        arr[i] =arr[i] ^arr[j];
        arr[j] = arr[i]^arr[j];
        arr[i] = arr[i]^arr[j];

如果是两个变量,上面交换逻辑没问题,如果是通过坐标来访问指针,必须判断两者是否相等,否则出错。

  • 4、数组排序
        Arrays.sort(nums);


dfs bFs 遍历

这两种遍历可以证连贯性,虽然是树的遍历方式,但是在数组中,可以利用这两种遍历方式来回达到连贯性的遍历手段,很不错的方式,但要借助一个二维数组来控制访问的位置,标明那些位置已经被访问了。

你可能感兴趣的:(工具技巧)