剑指offer------Day1

Arrays.sort()
Arrays.toString()
StringBuffer.append()
++st[nums[i]]
String,charAt()

登录力扣,点击题单,选择剑指offer(第二版),开始我的刷题之旅了

算法,作为一个程序员应该十分能理解这两个字的含义(进入大厂必备技能),除非你没有一颗进大厂的心,一开始的我是这样的,但是后来因为一些缘故,我必须要提升自己的技能,这样才能遇到志同道合的人跟你一起并肩作战。如果你还没毕业建议你多了解算法,如果你毕业了那么朋友卷起来。

剑指offer------Day1_第1张图片

Day1,先来前边几道题

没做之前是这样的,因为我之前确实没刷过,然后进了国企,说实话国企的氛围真的很不错,没有职场上的尔虞我诈,但是这里提升真的很慢,如果你是一个卷人,那么你可以选择跳一跳了,国企里的生活,项目忙的时候是真的忙,闲的时候也是真的闲,我是那种不喜欢加班的人所以一到点我就会走了,这样就有更多时间做自己想做的事情了。在职场上还是需要能抗打一些的,如果你不抗打,那么就会偶尔遇到什么事情心情就会很低落,这就会让你在乐观的道路上越走越远,这是绝对不行的,因为爱笑的女孩子会很幸运哦(这部分送给程序媛们)
剑指offer------Day1_第2张图片

练前了解学习

刚开始练的时候还是建议先了解一下:
二叉树,数组,链表,队列,栈,哈希表的使用,HashMap,二分查找,递归,回溯,贪心,动态规划
这个就很不错:代码随想录

Day1:剑指 Offer 03. 数组中重复的数字

力扣链接:剑指 Offer 03. 数组中重复的数字
看到这道题然后我想到的就挺复杂的解法,后来看到帅地的解法,觉得这种简单的解法太适合我了,太久没有硬是编程了,然后提交了好几遍才通过

题目:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

题解:这一题最重要的是排序Arrays.sort(nums);排序后前后比较,要是相等就返回,他只需要输出一个重复数字

class Solution {
    public int findRepeatNumber(int[] nums) {
        Arrays.sort(nums);
        for(int i=0;i<nums.length-1;i++){
            if(nums[i]==nums[i+1]){return nums[i];}
        }
        return -1;
    }
}

喜欢这个解法:
剑指offer------Day1_第3张图片

class Solution {
    public int findRepeatNumber(int[] nums) {
        int n = nums.length;
        int[] st = new int[n + 1];
        for(int i = 0; i < n; i++) {
            if(++st[nums[i]] > 1) return nums[i];
        }
        return -1;
    }

Day1:剑指 Offer 04. 二维数组中的查找

力扣链接:剑指 Offer 04. 二维数组中的查找
这题我还是喜欢自己的左右指针写法,看了其他的感觉太复杂了,双指针写法可以让思路更清晰。

题目:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

.
题解:使用二分法的思路,判断比较,比目标值大数值往右移,比目标值小数值往左移,一次只判断一位数。行数:matrix.length;列数:matrix【0】.length;循环需要注意一下,行小于行数-1,列需要大于0

class Solution {
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
        if(matrix==null||matrix.length==0||matrix[0].length==0)return false;
        int rows =matrix.length;
        int left =matrix[0].length-1;
        int right=0;
        while(right<=rows-1 && left>=0){
            if(matrix[right][left]==target){
                return true;
            }else if(matrix[right][left]<target){
                        right++;
            }else{
                left--;
            }
        }
            return false;
    }
}

Day1:剑指 Offer 05. 替换空格

力扣题目:剑指 Offer 05. 替换空格
这个就比较简单了,可以产生很多思路

题解:遍历字符串,生成一个StringBuffer 字符序列,判断若为空格将“%20”append进去,否则append原本的数值

class Solution {
    public String replaceSpace(String s) {
        StringBuffer sb  = new  StringBuffer();
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)==' '){
                sb.append("%20");
            }else{
                sb.append(s.charAt(i));
            }
    }
     return sb.toString();
 }
}

Day1:剑指 Offer 06. 从尾到头打印链表

力扣题目:剑指 Offer 06. 从尾到头打印链表
我不知道有没有人跟我一样觉得链表挺好用,但是看到链表又有一些慌的,可能是当时在学校的时候,老师把它神话了,以至于我现在看到它如此的慌张,有没有人跟我一样拿到这种题就想着遍历,结果看人家需要输出的是啥数组,存进去不就行了

题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

题解:遍历一遍链表得到链表长度,创建数组,从数组最后一个值开始存放,将链表从第一个值开始放进去

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
  public int[] reversePrint(ListNode head) {
        ListNode  temp = head;
        int len =0;
        while(temp !=null){
            len++;
            temp = temp.next;
        }
        int[]  nums = new int[len];
        temp =head;
        while(temp !=null){
            nums[--len]=temp.val;
            temp = temp.next;
        }
        return nums;
    }
}

今天的剑指offer完成,常练真的有好处,脑子都变得灵活多了,逻辑思维能力都能变强

剑指offer------Day1_第4张图片

你可能感兴趣的:(剑指offer,leetcode,算法,贪心算法)