【刷题笔记/剑指Offer】51-61

Python版剑指Offer题解 Python版剑指Offer题解 本题解配合leetcode中剑指Offer刷题使用 参考链接:图解算法数据结构 文章目录剑指 Offer 03. 数组中重复的数字剑指 Offer 04. 二维数组中的查找剑指 Offer 05. 替换空格剑指 Offer 06. 从尾到头打印链表剑指 Offer 07. 重建二叉树剑指 Offer 09. 用两个栈实现队列剑指 Offer 10- I. 斐波那契数列剑指 Offer 10- II. 青蛙跳台阶问题剑指 Offer 11. 旋转数组的最小数字剑指 Offe 阅读详情

1. 字符流中第一个不重复的字符

请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。

如果当前字符流没有存在出现一次的字符,返回#字符。

看了一会儿也没搞懂这到底要干嘛,感觉给的函数头有点儿莫名其妙,就自己写了个类,借助hashmap存储出现的次数,附带测试函数:

import java.util.HashMap;
import java.util.Map;

public interface FirstAppearingOnce {
    Map<Character, Integer> map = new HashMap<Character, Integer>();

    public static char firstAppearingOnce(String string) {
        char[] set = string.toCharArray();
        // first loop to build up the map
        for(int i = 0; i < set.length; i++) {
            if(map.containsKey(set[i])) {
                map.put(set[i], map.get(set[i])+1);
            } else {
                map.put(set[i], 1);
            }
        }
        //second loop to find the first appearing once character
        for(int i = 0; i < set.length; i++) {
            if(map.get(set[i]) == 1)
                return set[i];
        }
        return '#';
    }

    public static void main(String[] args) {
        String string = "asdfghjklasdfghjl";
        System.out.println(firstAppearingOnce(string));
    }
}

2. 链表中环的入口结点

一个链表中包含环,请找出该链表的环的入口结点。

最初的思路是:初始化两个指针,对每个指针1,指针2从它的下一个开始,往下走,如果两者相遇,那就返回指针1.这样算法复杂度是O(n^2)。
参考了一下书中的思路:先得到环的结点个数n,再将指针2前移n位,接下来让指针1和指针2以相同速度往前移动,它们相遇的时候,指针2已经跑完了一圈回来了,这样就找到了入口节点。
至于环结点个数n怎么求:初始化两个指针p1, p2,它们速度不同,先求出相遇的结点,然后计数从头结点开始到该节点的步数。

/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
public static ListNode meetingNode(ListNode head) {
        if(head==null)
            return null;

        ListNode slow = head.next;
        if(slow==null)
            return null;

        ListNode fast = slow.next;
        while (slow != null && fast != null) {
            if(slow==fast){
                return fast;
            }
            slow=slow.next;
            fast=fast.next;

            if(fast!=slow){
                fast=fast.next;
            }
        }
        return null;
    }

    public ListNode EntryNodeOfLoop(ListNode pHead) {
        ListNode meetingNode=meetingNode(pHead);
        if(meetingNode==null)
            return null;
//      得到环中的节点个数
        int nodesInLoop=1;
        ListNode p1=meetingNode;
        while(p1.next!=meetingNode){
            p1=p1.next;
            ++nodesInLoop;
        }
//      移动p1
        p1=pHead;
        for(int i=0;i<nodesInLoop;i++){
            p1=p1.next;
        }
//      移动p1,p2
        ListNode p2=pHead;
        while(p1!=p2){
            p1=p1.next;
            p2=p2.next;
        }
        return p1;
    }
}

3. 删除链表中重复的结点

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

需要注意的是,这里要考虑到头节点也可能重复的情况。那么引入一个头节点之前的备用节点就显得很巧妙的解决了这个问题,这个思路和C++中链表的空链表头很像。代码如下:

/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public ListNode deleteDuplication(ListNode pHead)
    {

        if (pHead == null) return null;
        ListNode p = pHead;
        ListNode n = new ListNode(0);
        ListNode pre = n;
        n.next = pHead;
        boolean flag = false;
        while (p != null) {
            ListNode q = p.next;
            if (q == null) break;
            if (q.val == p.val) {
                while (q != null && q.val == p.val) {
                    q = q.next;
                }
                pre.next = q;
                p = q;
            } else {
                if (!flag) {
                    n.next = p;
                    flag = true;
                }
                pre = p;
                p = q;
            }
        }
        return n.next;
    }
}

4. 二叉树的下一个结点

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

额,第一次试试这个flowchart,画的有点儿丑,大伙儿将就着看。。基本逻辑已经表述清楚了。

Created with Raphaël 2.1.0开始pNode!=null?有右子树?返回右子树最左子结点结束是左结点?返回父结点返回最后一个左父结点的右父结点yesnoyesnoyesno
/*
public class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public TreeLinkNode GetNext(TreeLinkNode pNode)
    {
        if(pNode == null)
            return pNode;        
        TreeLinkNode nextNode = null;
        if(pNode.right != null) {//结点有右子树
            nextNode = pNode.right;
            while(nextNode.left != null)
                nextNode = nextNode.left;
        } else {
            if(pNode.next == null) {//结点无右子树,为根结点,无父结点
                nextNode = null;
            } else {
                if(pNode.next.left == pNode) {//结点无右子树,是父结点的左结点
                    nextNode = pNode.next;
                } else if(pNode.next.right == pNode) {//结点无右子树,是父结点的右结点
                    while(pNode.next != null) {
                        nextNode = pNode.next;
                        if(nextNode.left == pNode)
                            return nextNode;
                        pNode = pNode.next;
                    }
                    nextNode = null;
                }
            } 
        } 
        return nextNode;
    }
}

5. 对称的二叉树

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

只能说递归思想要掌握。。

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    boolean isSymmetrical(TreeNode pRoot) {
        return isSymmetrical(pRoot, pRoot);
    }

    boolean isSymmetrical(TreeNode pRoot1, TreeNode pRoot2) {
        if(pRoot1 == null && pRoot2 == null)
            return true;
        if(pRoot1 == null || pRoot2 == null)
            return false;
        if(pRoot1.val != pRoot2.val)
            return false;

        return isSymmetrical(pRoot1.left, pRoot2.right)
            && isSymmetrical(pRoot1.right, pRoot2.left);
    }
}

6. 按之字形顺序打印二叉树

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

思路是以广度优先遍历算法基础,每行用一个flag记录是该正向打印还是反向打印,代码如下:

/*按层序遍历分层打印的代码,添加一段判断用以倒序输出即可*/
    public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
        if(pRoot == null){
            return result;
        }
        boolean leftToRight = true;
        Queue<TreeNode> layer = new LinkedList<TreeNode>();
        ArrayList<Integer> layerList = new ArrayList<Integer>();
        layer.add(pRoot);
        int start = 0, end = 1;
        while(!layer.isEmpty()){
            TreeNode cur = layer.remove();
            layerList.add(cur.val);
            start++;
            if(cur.left!=null){
                layer.add(cur.left);          
            }
            if(cur.right!=null){
                layer.add(cur.right);
            }
            if(start == end){
                end = layer.size();
                start = 0;             
                if(!leftToRight){
                    result.add(reverse(layerList));
                }else{
                    result.add(layerList);
                }
                leftToRight = !leftToRight;
                layerList = new ArrayList<Integer>();
            }
        }
        return result;
    }
    private ArrayList reverse(ArrayList<Integer> layerList) {    
        int length = layerList.size();
        ArrayList<Integer> reverseList = new ArrayList<Integer>();
        for(int i = length-1; i >= 0;i--){
            reverseList.add(layerList.get(i));
        }
        return reverseList;
    }

7. 把二叉树打印成多行

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

利用队列完成广度优先遍历,不过这里因为要按行打印,所以需要借助两个变量,curr(记录本行还有多少结点要打印)及next(记录下行还有多少结点要打印)来辅助:

import java.util.ArrayList;
import java.util.LinkedList;

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
        if(pRoot == null) 
            return result;
        ArrayList<Integer> tmp = new ArrayList<Integer>();
        LinkedList<TreeNode> queue = new LinkedList<TreeNode>();

        queue.add(pRoot);
        int curr = 1;
        int next = 0;
        while(!queue.isEmpty()) {
            TreeNode node = queue.remove();
            curr--;
            tmp.add(node.val);

            if(node.left != null) {
                queue.add(node.left);
                next++;
            }
            if(node.right != null) {
                queue.add(node.right);
                next++;
            }

            if(curr == 0) {
                result.add(new ArrayList(tmp));
                tmp.clear();
                curr = next;
                next = 0;
            }
        }
        return result;
    }
}

8. 序列化二叉树

请实现两个函数,分别用来序列化和反序列化二叉树

序列化二叉树,在这讲白了就是把二叉树化为字符串,反序列化二叉树就是将字符串还原为二叉树。定义以“,”分隔,null为“$”,代码如下:

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    String Serialize(TreeNode root) {
        if(root == null)
            return "";
        StringBuffer buffer = new StringBuffer();
        Serialize(root, buffer);
        return buffer.toString();
    }
    void Serialize(TreeNode root, StringBuffer buffer) {
        if(root == null) {
            buffer.append("$,");
            return;
        }
        buffer.append(root.val + ",");
        Serialize(root.left, buffer);
        Serialize(root.right, buffer);
    }
    TreeNode Deserialize(String str) {
        if(str == null || str.length() == 0)
            return null;
        String[] strs = str.split(",");
        return addDeserialize(strs);
    }
    int index = -1;
    TreeNode addDeserialize(String[] strs) {
        index++;
        if(index < strs.length && !strs[index].equals("$")) {
            TreeNode node = new TreeNode(0);
            node.val = Integer.parseInt(strs[index]);
            node.left = addDeserialize(strs);
            node.right = addDeserialize(strs);
            return node;
        }
        return null;
    }

}

8. 二叉搜索树的第k个结点

给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。

注意到二叉搜索树中序遍历后便是从小到大排序的结果。所以用中序遍历。另外主要要强调的是,md第k大的数十从小到大第k个数的意思啊。。。anyway,代码如下:

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
import java.util.ArrayList;

public class Solution {
    ArrayList<TreeNode> array = new ArrayList<TreeNode>();
    TreeNode KthNode(TreeNode pRoot, int k)
    {
        if(pRoot == null || k <= 0)
            return null;
        InorderTraverse(pRoot);
        if(array.size() >= k)
            return array.get(k - 1);
        return null;
    }
    //int count = 0;
    void InorderTraverse(TreeNode pRoot) {
        if(pRoot == null)
            return;
        if(pRoot.left != null)
            InorderTraverse(pRoot.left);
        array.add(pRoot);
        if(pRoot.right != null)
            InorderTraverse(pRoot.right);
    }
}

9. 滑动窗口的最大值

给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。

用双端队列,队列尾插入元素,若要插入的元素大于队列尾的元素,就删除队列尾的元素,如果队列头存储的index不在窗口内,就删除队列头。

码代码能力很需要提升,用IDE调了好一阵子才弄出来。。

import java.util.*;

public class Solution {
    public static ArrayList<Integer> maxInWindows(int [] num, int size)
    {
        ArrayList<Integer> result = new ArrayList<>();
        if(num.length == 0 || size <= 0)
            return result;
        else if(size > num.length){
            return result;
        }
        else if(size == 1) {
            for(int i = 0; i < num.length; i++)
                result.add(num[i]);
            return result;
        }
        Deque<Integer> deque = new ArrayDeque<Integer>();
        deque.addLast(0);
        for(int i = 1; i < size; i++) {
            while(!deque.isEmpty() && num[deque.peekLast()] < num[i])
                deque.removeLast();
            deque.addLast(i);
        }
        result.add(num[deque.peekFirst()]);
        for(int i = size; i < num.length; i++) {
            while(i - deque.peekFirst() >= size)
                deque.removeFirst();
            while(!deque.isEmpty() && num[deque.peekLast()] < num[i])
                deque.removeLast();
            deque.addLast(i);
            result.add(num[deque.peekFirst()]);
        }
        return result;
    }

    private static int findMax(int[] num) {
        int max = num[0];
        for(int i = 1; i < num.length; i++) {
            if(num[i] > max) 
                max = num[i];
        }
        return max;     
    }
}

10. 矩阵中的路径

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。

回溯法解决该问题,试探前进,若不符合条件就退回。代码如下:

public class Solution {
    public boolean hasPath(char[] matrix, int rows, int cols, char[] str)
    {
        if(matrix == null || rows < 1 || cols < 1 || str == null)
            return false;

        boolean [][] visited = new boolean[rows][cols];
        for(int i = 0; i < rows; i++) {
            for(int j = 0; j < cols; j++) {
                visited[i][j] = false;
            }
        }

        int pathLength = 0;

        for(int row = 0; row < rows; row++) {
            for(int col = 0; col < cols; col++) {
                if(hasPathCore(matrix, rows, cols, row, col, str, visited, pathLength))
                    return true;
            }
        }
        return false;
    }

    public boolean hasPathCore(char[] matrix, int rows, int cols, int row, int col, char[] str, 
            boolean[][] visited, int pathLength) {
        if(pathLength >= str.length)
            return true;
        boolean hasPath = false;
        if(row >= 0 && row < rows && col >= 0 && col < cols 
                && matrix[row * cols + col] == str[pathLength]
                && !visited[row][col]) {
            pathLength++;
            visited[row][col] = true;

            hasPath = hasPathCore(matrix, rows, cols, row - 1, col, str, visited, pathLength)
                    || hasPathCore(matrix, rows, cols, row + 1, col, str, visited, pathLength)
                    || hasPathCore(matrix, rows, cols, row, col - 1, str, visited, pathLength)
                    || hasPathCore(matrix, rows, cols, row, col + 1, str, visited, pathLength);

            if(!hasPath) {
                pathLength--;
                visited[row][col] = false;
            }
        }
        return hasPath;
    }
}

另外,eclipse的exception断点真的很好用,建议大家去学一下。

11. 机器人的运动范围

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?

public class Solution { 
    public int movingCount(int threshold, int rows, int cols)
    {
        if(threshold < 1 || rows < 1 || cols < 1)
            return 0;
        boolean[][] visited = new boolean[rows][cols];
        for(int i = 0; i < rows; i++) {
            for(int j = 0; j < cols; j++) {
                visited[i][j] = false;
            }
        }


        int count = movingCountCore(threshold, rows, cols, 0, 0, visited);

        return count;
    }

    public int movingCountCore(int threshold, int rows, int cols, int row, int col, boolean[][] visited) {
        int count = 0;
        if(isQualified(threshold, rows, cols, row, col, visited)) {
            visited[row][col] = true;

            count = 1 + movingCountCore(threshold, rows, cols, row - 1, col, visited) +
                    movingCountCore(threshold, rows, cols, row + 1, col, visited) +
                    movingCountCore(threshold, rows, cols, row, col - 1, visited) +
                    movingCountCore(threshold, rows, cols, row, col + 1, visited);
        }
        return count;
    }

    public boolean isQualified(int threshold, int rows, int cols, int row, int col, boolean[][] visited) {
        if (row >= 0 && row < rows && col >= 0 && col < cols && !visited[row][col]
                && (sumOf(row) + sumOf(col)) <= threshold) {
            return true;
        }
        return false;
    }

    public int sumOf(int n) {
        int sum = 0;
        while(n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }
}
高通 Gen AI 推理扩展 (GENIE)(5):实战指南与Engine API深度解析 本文深入解析高通Gen AI推理扩展(GENIE)的Engine API核心功能与实战应用,涵盖引擎实例化、多引擎动态切换、性能调优及跨平台部署等关键技巧。通过详细代码示例和性能数据,帮助开发者高效利用GENIE进行AI推理,提升应用性能与稳定性。 阅读详情

相关推荐

不用敲命令!用宝塔面板可视化部署pbootCMS的保姆级教程(2024最新版)

本文提供2024年最新版pbootCMS可视化部署教程,全程使用宝塔面板操作,无需任何命令行知识。从服务器初始化、LNMP环境配置到源码上传、安装向导,手把手指导用户通过图形化界面快速搭建专业网站,适合零基础新手和追求高效建站的用户。

weixin_42509507的博客 490

【刷题】2021最新剑指Offer汇总

新手村 关卡1-1 洛谷的第一个任务 超级玛丽游戏(洛谷-P1000):点击这里 A+B Problem(洛谷-P1001):点击这里

瑞新の博客:bennyrhys 6299

从材料到磁场:ANSYS Workbench永磁体仿真全流程解析

本文详细解析了在ANSYS Workbench中进行永磁体仿真的完整流程。从钕铁硼等永磁材料的特性讲起,逐步指导如何在软件中搭建模型、定义关键磁化方向、设置边界条件与网格划分,并解读磁场分布结果。文章旨在帮助工程师掌握静磁场仿真核心技术,为电机、传感器等设备的设计与优化提供精准指导。

weixin_29229989的博客 273

剑指Offer Java版 66题刷题笔记汇总

备战校招研发岗,无论笔试还是面试算法都占很大比重的,加油! 写在前面 此文章为刷题笔记的汇总篇,包含《剑指Offer》66道算法题的个人解题思路及Java代码。 代码同步发布在GitHub:https://github.com/JohnnyJYWu/offer-Java 所有题目均可在牛客网在线编程平台进行调试。 网址:https://www.nowcoder.com/ta/coding...

机盐的博客 3735

用deepseek对GPU服务器进行压力测试

利用 DeepSeek 模型对 GPU 服务器进行压力测试,核心思路是通过,验证 GPU 服务器在计算、显存、网络等维度的承载能力,同时观察稳定性与性能瓶颈。

weixin_42795092的博客 1610

Autosar MCAL-S32k324 Crypto配置-基于EB

NXP官网提供了免费的HSE固件,同时也提供了对应的协议栈。本文以算法为例,介绍MCAL相关的配置及在代码中的集成与使用。使用HSE计算,比软件算法确实方便许多。后面会完善更多的算法测试。

赞的博客 2436

《剑指Offer》刷题笔记汇总

文章目录前言源码地址题目分类数组(Array)字符串(String)链表(LinkList)栈和队列(Stack &amp;amp;amp;amp; Queue)数学(Math)回溯法(Backtracking)动态规划(Dynamic Programming) 前言 2018年10月购买的《剑指Offer(第二版)》,平常课业较为繁重,寒假是个刷题的好时间,自己前前后后用了一周的时间刷完了剑指上除了与&amp;amp;quot;树&amp;amp;quot;相关的题目,...

ZY-JIMMY 1955

Android功耗系列专题理论之十一:高通QCOM平台待机功耗问题分析方法

本文详细介绍了高通QCOM平台待机功耗问题的分析方法。首先强调测试环境标准化的重要性,包括关闭无线功能、日志记录和非必要传感器。重点分析了硬件连接检查、驱动配置验证、电源管理策略优化等关键步骤。文章详细讲解了射频校准、时钟源/中断分析、子系统状态检查等专业技术方法,并提供了具体的命令行操作示例。此外还介绍了外设拆解、外灌电压测试等硬件排查手段,以及功耗分解板、波形分析等高级诊断技术。最后强调了固件版本验证和环境因素测试的必要性,为工程师提供了系统性的功耗问题排查思路。

772

剑指offer刷题笔记

剑指offer,4-5章

夏尔的小木屋 473

Calibre 3Dstack --每日一个命令day27【overlap】(3-27)

本文介绍了Calibre3Dstack中overlap命令的使用方法。该命令用于检查两个已放置层之间的重叠量是否符合要求,支持设置检查名称、层类型、堆叠范围、检查方向等参数。关键参数包括:-constraint指定重叠约束条件,-exact控制百分比精度,-by_area切换为面积检查模式,-intersection报告相交区域。检查结果可通过RVE选项定制显示方式,适用于3D堆叠设计中的层间重叠验证场景。

u013620135的博客 112

lammps多晶正弦粗糙界面建模

其中,30可以理解为正弦曲线的幅度,150为正弦曲线的基准坐标值,80控制周期,改变参数多试试就能找到规律。很久之前介绍过lammps粗糙界面建模,主要是在lammps中进行一维和二维的正弦粗糙面建模。运行完成后,会生成final.data,这个模型即为上表面为正弦波动的粗糙界面。新建1.py文件,粘贴下面内容后,运行:python 1.py。多晶需要在atomsk中进行,因此上述的方法就不再适用。最近有学员咨询多晶模型的正弦粗糙界面建模应该如何实现。在cmd窗口按顺序运行以下命令创建多晶模型。

lammps_jiayou的博客 390

《剑指 Offer I》刷题笔记 51 ~ 61 题

位运算(简单) 51. 二进制中 1 的个数 52. 不用加减乘除做加法(背题) 53. 数组中数字出现的次数* 54. 数组中数字出现的次数 II 55. 数组中出现超过一半的数字 56. 构建乘积数组 57. 剪绳子 58. 和为 s 的连续正数序列 59. 圆圈中最后剩下的数字 60. 顺时针打印矩阵 61. 栈的压入、弹出序列

萌宅鹿的技术小屋 2910

QGis软件 —— 2、QGis加载在线地图两种方式(谷歌地图、天地图)

QGis软件 —— 2、QGis加载在线地图两种方式(谷歌地图)

1万+

【牛客剑指offer刷题】:Python版 目录

链接:https://www.nowcoder.com/questionTerminal/947f6eb80d944a84850b0538bf0ec3a5

Jack_Kuo的博客 1822

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

剑指offer刷题顺序

数组(共12道题目): 【剑指Offer】1、二维数组中的查找 【剑指Offer】6、旋转数组的最小数字 【剑指Offer】13、调整数组顺序使奇数位于偶数前面 【剑指Offer】19、顺时针打印矩阵 【剑指Offer】28、数组中出现次数超过一半的数字 【剑指Offer】30、连续子数组的最大和 【剑指Offer】32、把数组排成最小的数 【剑指Offer】35、数组中的逆序对 【剑指Offer】37、数字在排序数组中出现的次数 【剑指Offer】40、数组中只出现过一次的数字 【剑

sunjingze1的博客 2434

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

剑指 Offer 总结 - leetcode 剑指offer系列

剑指 Offer 系列完结撒花!! ???????? 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写这个系列耗费了我不少精力, 不过我也很开心能和大家分享, 真心希望能对大家有所帮助, 也希望大家能够多多点赞转发和分享, 让更多人看到, 谢谢~ 接下来我需要休整一段时间来准备新的系列了, 中间也可能会有一些不定期更新. 至于新系列是什么呢? 大家敬请期待 ???? P.S.

随便发挥的博客 3570

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

LeetCode刷题汇总

剑指offer 剑指 Offer 03 数组中重复的数字 剑指 Offer 04 二维数组中的查找 剑指 Offer 05 替换空格 剑指 Offer 06 从尾到头打印链表 剑指 Offer 07 重建二叉树 剑指 Offer 09 用两个栈实现队列 剑指 Offer 10- I 斐波那契数列 剑指 Offer 10- II 青蛙跳台阶问题 剑指 Offer 11 旋转数组的最小数字 剑指 Offer 12 矩阵中的路径 剑指 Offer 13 机器人的运动范围 剑指 Offer 14- I 剪绳子 剑指

weixin_44171872的博客 2万+

力扣【剑指offer】题目汇总与总结

本文为《剑指offer》刷题笔记的总结,花费不到两个月的时间将力扣上《剑指offer》的75道题刷了一遍,遇到不会的知识点或者应该做一些记录的题目都将其写在了往日的博客里。 整体来看,这75道题,涉及到常用的数据结构:数组、字符串、链表、栈、队列、树、图,还有一些常用的数据操作和算法:二分法、哈希表、递归、排序、查找、位运算、动态规划、回溯、滑动窗口、双指针、深度优先搜素(DFS)、贪心。 1、数组 (1)剑指offer03.数组中重复的数字。 (2)剑指offer04.二维数组中的查找。解法:找标

华辰烟雨的博客 6万+

《剑指Offer》题解汇总索引表(leetcode)

《剑指Offer》题解汇总索引表(leetcode) ???? 文章目录《剑指Offer》题解汇总索引表(leetcode)[【LeetCode】《剑指Offer》第Ⅰ篇⊰⊰⊰ 3 - 11题](https://blog.youkuaiyun.com/weixin_44368437/article/details/114194973)[【LeetCode】《剑指Offer》第Ⅱ篇⊰⊰⊰ 12 - 19题](https://blog.youkuaiyun.com/weixin_44368437/article/details/114

像写诗一样优雅地写代码~ 2万+

大神整理的剑指Offer【所有面试题汇总】

    剑指Offer学习   剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退。只有不断地学习才能跟上时候,跟得上技术的潮流! 所有代码下载【https://github.com/Wang-Jun-Chao/coding-interviews】 目录 第01-10题 【剑指Offer学习】【面试题02:...

晓飛的博客 3万+

【LeetCode】《剑指Offer》第Ⅷ篇⊰⊰⊰ 61 - 68题

【LeetCode】《剑指Offer》第Ⅷ篇⊰⊰⊰ 61 - 68题 文章目录【LeetCode】《剑指Offer》第Ⅷ篇⊰⊰⊰ 61 - 68题61. 扑克牌中的顺子(easy)62. 圆圈中最后剩下的数字(easy)63. 股票的最大利润(medium)64. 求1+2+…+n(medium)65. 不用加减乘除做加法(easy)66. 构建乘积数组(medium)67. 把字符串转换成整数(medium)68 - I. 二叉搜索树的最近公共祖先(easy)68 - II. 二叉树的最近公共祖先(eas

像写诗一样优雅地写代码~ 4245

LeetCode+剑指offer 题目(按标签汇总)

数组相关 1.两数之和

人大神成长记2 6153

【剑指offer】-刷题

【剑指offer】-刷题 3-数组中重复的数字 * number[i] != i swap number[i] = number[number[i]] {2,3,1,0,2,5,3} // 数组第0个元素是2,它与下标不一致,将它和下标为2的数字0交换 c++代码 class Solution { public: bool duplicate(int numbers[], int ...

disguiseR 2030

刷题笔记(剑指offer-67题,Java版)

本文包括刷题的总体思想要义、以及剑指offer67题的全部题解

晋青杨 1376

小白的剑指offer刷题

剑指offer刷题 文章目录剑指offer刷题1.二维数组中的查找2.替换空格3.从尾到头打印链表4.重建二叉树5.用两个栈实现队列6.旋转数组的最小数字7.斐波那契数列8.台阶跳9.变态台阶跳10.矩形覆盖11.二进制中的1的个数(未解决)12.数值的整数次方13.调整数组顺序使奇数位于偶数前14.链表中倒数第k个节点15.反转链表16.链表合成17.判断是否是子二叉树18.盛水最多的容器19....

summer_bugs的博客 1993
上一篇: 【JAVA】 标注(Annotation)
下一篇: 【JAVA】堆实现
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值