剑指Offer编程题集

剑指offer题目及答案 剑指offer最近在牛客网上刷剑指offer的题目,现将题目和答案总结如下 阅读详情

二维数组中的查找

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

package ccnu.offer;

public class Test00 {
	public static void main(String[] args){
		int[][] array = {{1, 3, 5, 23}, {3, 8, 12, 32}, {7, 13, 17, 56}};
		boolean b = find(1, array);
		boolean b1 = find1(1, array);
		System.out.println(b);
		System.out.println(b1);
	}
	
	public static boolean find(int target, int [][] array) {
	        for(int i = 0; i < array.length; i++){ // 以每一行为单位进行查找
	            if(isFind(array, i, target)){
	                return true;
	            }
	        }
	        return false;
	    }

	public static boolean isFind(int[][] array, int row, int target) {
		int[] tmp = array[row];
		int low = 0;
		int high = tmp.length - 1;
		int mid = (low + high) / 2;
		while (low <= high) { // 对行号为row的行进行二分查找
			if (target > tmp[mid]) {
				low = mid + 1;
			} else if (target == tmp[mid]) {
				return true;
			} else {
				high = mid - 1;
			}
			mid = (low + high) / 2;
		}
		return false;
	}
	
	public static boolean find1(int target, int[][] array){ // 左下角开始
		int row = array.length - 1;
		int column = 0;
		while(row >= 0 && column <= array[0].length - 1){
			if(target == array[row][column]){ // 相等找到退出
				return true;
			}else if(target > array[row][column]){ // 大于右移
				column++;
			}else{ // 上移
				row--;
			}
		}
		return false;
	}
}

替换空格

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy

package ccnu.offer;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test01 {
	public static void main(String[] args) {
		System.out.println(replaceSpace(new StringBuffer(" We   Are Happy")));
	}

	public static String replaceSpace1(StringBuffer str) {
		Pattern p = Pattern.compile(" +"); //直接利用正则表达式替换
		Matcher m = p.matcher(str);
		return m.replaceAll("%20");
	}

	public static String replaceSpace(StringBuffer str) {
		if(str == null){
			return null;
		}
		StringBuffer sb = new StringBuffer();
		char tmp;
		for(int i = 0; i < str.length(); i++){
			if((tmp = str.charAt(i)) != ' '){
				sb.append(tmp);
			}else if((i - 1) >= 0 && str.charAt(i - 1) != ' '){ // 连续多个空格只会替换一次
				sb.append("%20");
			}
		}
		return sb.toString();
	}

}

从尾到头打印链表

输入一个链表,从尾到头打印链表每个节点的值

package ccnu.offer;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;

public class Test02 {
	public static void main(String[] args) {
		int[] arr = {1, 23, 12, 8, 222};
		int i = 0;
		ListNode listNode = new Test02().new ListNode(arr[i++]);
		listNode.next = null;
		ListNode p = listNode;
		while(i < arr.length){ // 创建单链表
			 ListNode tmp = new Test02().new ListNode(arr[i++]);
			 tmp.next = null;
			 p.next = tmp;
			 p = tmp;
		}
		List<Integer> l = printListFromTailToHead3(listNode);
		for(Integer t : l){
			System.out.println(t);
		}
	}

	public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
		List<Integer> l = new ArrayList<Integer>();
		List<Integer> l2 = new ArrayList<Integer>();
		ListNode node = listNode;
		while (node != null) {
			l.add(node.val);
			node = node.next;
		}
		ListIterator<Integer> iter = l.listIterator(l.size());
		while (iter.hasPrevious()) { // 从尾部向前遍历
			l2.add(iter.previous());
		}
		return (ArrayList<Integer>) l2;
	}

	class ListNode {
		private int val;
		private ListNode next = null;
		
		ListNode(int val) {
			this.val = val;
		}
	}
	
	public static ArrayList<Integer> printListFromTailToHead2(ListNode listNode) {
		List<Integer> l = new ArrayList<Integer>();
		ListNode p = listNode;
		while(p != null){
			l.add(p.val);
			p = p.next;
		}
		Collections.reverse(l); // 将容器中元素利用集合工具类中方法直接反转
		return (ArrayList<Integer>)l;
	}
	
	public static ArrayList<Integer> printListFromTailToHead3(ListNode listNode) {
		ArrayList<Integer> l = new ArrayList<Integer>();
		ListNode p = listNode;
		while (p != null) {
			l.add(p.val);
			p = p.next;
		}
		int size = l.size();
		for(int i = 0; i < size/2; i++){ // 直接遍历反转
			int tmp = l.get(size - i -1);
			l.set(size - i - 1, l.get(i));
			l.set(i, tmp);
		}
		return l;
	}
}

重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回

package ccnu.offer;

import java.util.ArrayList;
import java.util.List;

public class Test03 {
	public static void main(String[] args) {
		int[] pre = { 1, 2, 3, 4 };
		int[] in = { 2, 1, 4, 3 }; // postOrder:2, 4, 3, 1
		List<Integer> l = postOrder(reConstructBinaryTree(pre, in));
		for (Integer i : l) {
			System.out.print(i + " ");
		}
		List<Integer> l2 = postOrder(reConstructBinaryTree2(pre, in, 0, 0, pre.length));
		System.out.println();
		for (Integer i : l2) {
			System.out.print(i + " ");
		}
	}
	
	
	public static List<Integer> postOrder(TreeNode root){
		List<Integer> rootL = new ArrayList<Integer>();
		List<Integer> leftL = new ArrayList<Integer>();
		List<Integer> rightL = new ArrayList<Integer>();
		List<Integer> l = new ArrayList<Integer>();
		if(root != null){
			leftL = postOrder(root.left);
			rightL = postOrder(root.right);
			rootL.add(root.val);
		}
		l.addAll(leftL);
		l.addAll(rightL);
		l.addAll(rootL);
		return l; 
	}
//	构建一个二叉树by前序遍历(NLR)and中序遍历(LNR)
	public static TreeNode reConstructBinaryTree(int [] pre,int [] in) {
		int pl = 0; // 先序左边节点
		int pr = pre.length - 1; // 先序右边节点
		int il = 0; // 中序左边节点
		int ir = in.length - 1; // 中序右边节点
		return create(pre, in, pl, pr, il, ir);
    }
	
	private static TreeNode create(int[] pre, int[] in, int pl, int pr, int il, int ir){
		TreeNode root = new Test03().new TreeNode(pre[pl]);
		int i;
		for(i = 0; pre[pl] != in[i]; i++); // 找出中序遍历中的当前子树前序的第一个节点的位置
		int lLen = i -  il; // 左子树长度
		int rLen = ir - i; // 右子树长度
		if(lLen > 0){ // 左子树不为空
			root.left = create(pre, in, pl + 1, pl + lLen, il, il + lLen - 1);
		}else{
			root.left = null;
		}
		if(rLen > 0){ // 右子树不为空
			root.right = create(pre, in, pr - rLen + 1, pr, ir - rLen + 1, ir);
		}else{
			root.right = null;
		}
		return root;
	}
	
	// preBegin表示当前前序序列的开始索引
	// inBegin表示当前中序序列的开始索引
	// len表示当前序列的长度
	public static TreeNode reConstructBinaryTree2(int[] pre, int[] in, int preBegin, int inBegin, int len){
		if(pre == null || in == null || pre.length != in.length || pre.length == 0 || in.length == 0){
			return null;
		}
		if(len <= 0){
			return null;
		}
		TreeNode root = new Test03().new TreeNode(pre[preBegin]);
		int rootIndex;
		for(rootIndex = 0; in[rootIndex] != pre[preBegin]; rootIndex++);
		root.left = reConstructBinaryTree2(pre, in, preBegin + 1, inBegin, rootIndex - inBegin);
		root.right = reConstructBinaryTree2(pre, in, preBegin + (rootIndex - inBegin) + 1, rootIndex + 1, len - (rootIndex - inBegin) - 1);
		return root;
	}
	
	class TreeNode{
		private int val;
		private TreeNode left;
		private TreeNode right;
		
		public TreeNode(int val){
			this.val = val;
		}
	}

用两个栈实现队列

用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型

package ccnu.offer;

import java.util.EmptyStackException;
import java.util.Stack;

public class Test04 {
	private Stack<Integer> stack1 = new Stack<Integer>(); // 负责元素进
	private Stack<Integer> stack2 = new Stack<Integer>(); // 负责元素出

	public int pop() {
		if (stack2.isEmpty()) { // 负责出元素的栈不为空
			if (stack1.isEmpty()) {
				throw new EmptyStackException();
			} else { // 负责进元素的栈不为空,那么就将其中所有的元素放入到stack2
				while (!stack1.isEmpty()) {
					stack2.push(stack1.pop());
				}
			}
		}
		return stack2.pop();
	}

	public void push(int val) {
		stack1.push(val);
	}

	public static void main(String[] args) {
		Test04 t = new Test04();
		t.push(12);
		t.push(1);
		t.push(6);
		System.out.println(t.pop());
		t.push(8);
		System.out.println(t.pop());
		System.out.println(t.pop());
		System.out.println(t.pop());
//		System.out.println(t.pop());
	}
}

旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0

package ccnu.offer;

public class Test05 {
	public static void main(String[] args) {
		int min = new Test05().minNumberInRotateArray(new int[]{5, 6, 6, 3, 4, 5});
		System.out.println(min);
	}
	
	public int minNumberInRotateArray(int [] array) {
		if(array == null){
			return 0;
		}
	    if(array.length == 0){
	    	return 0;
	    }
	    for(int i = 1; i < array.length; i++){
	    	if(array[i] < array[i - 1]){ // 若出现第一个元素递减就为最小元素
	    		return array[i];
	    	}
	    }
	    return array[0];
    }
}
	


斐波那契数列

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项

package ccnu.offer;

import java.util.ArrayList;
import java.util.List;

// 1 1 2 3 5 8 13 21 34 55 89 144
// 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233
// 377,610,987,1597,2584,4181,6765,10946,17711,28657,46368 ...
public class Test06 {
	public static void main(String[] args) {
		System.out.println(fibonacci(7));
		System.out.println(fibonacci1(7));
	}

	public static long fibonacci(int n) {
		if (n == 0) {
			return 0L;
		}
		if (n == 1 || n == 2) {
			return 1L;
		} else {
			return fibonacci(n - 1) + fibonacci(n - 2);
		}
	}

	public static long fibonacci1(int n) {
		List<Long> l = new ArrayList<Long>();
		l.add(1L); // 第一项
		l.add(1L); // 第二项
		int size;
		while (n > (size = l.size())) { // 当指定的项数不在容器中,则使用迭代得到这个项
			l.add(l.get(size - 1) + l.get(size - 2));
		}
		return l.get(n - 1);
	}

}

跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法

package ccnu.offer;

// 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
// 分析:如果当前有n级台阶,跳法f(n),此时可以选择跳1级或者2级.如果选择跳1级,剩下的n-1级跳法f(n-1);如果选择跳2级,剩下的n-2级跳法f(n-2)
// 因此n级台阶f(n) = f(n-1) + f(n-2)
public class Test07 {
	public static void main(String[] args) {
		int c = jumpFloor(3);
		System.out.println("cases: " + c);
		int c2 = jumpFloor2(3);
		System.out.println("cases: " + c2);
	}
	
	public static int jumpFloor(int target) {
		int one = 1;
		int two = 2;
		if(target == 1){ // 只有一级
			return one; // 一种可能
		}
		if(target == 2){ // 只有两级
			return two; // 两种可能
		}
		for(int i = 3; i <= target; i++){
			two = one + two;
			one = two - one;
		}
		return two;
    }
	
	public static int jumpFloor2(int target) {
		if (target < 0) {
			return 0;
		}
		if (target == 0) {
			return 1;
		} else {
			return jumpFloor2(target - 1) + jumpFloor2(target - 2);
		}
	}
}

变态跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法

package ccnu.offer;

// 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法
// 分析:如果当前有n级台阶,跳法f(n),此时可以选择跳1级或者2级.如果选择跳1级,剩下的n-1级跳法f(n-1);如果选择跳2级,剩下的n-2级跳法f(n-2),...,如果跳n-1级,剩下的n-(n-1)级跳法f(1)
// f(n) = f(n-1) + f(n-2) + ... +f(1) + f(0) .....①式,其中f(0)=1
// f(n-1) = f(n-2) + ... +f(1) + f(0) .....②式
// ①式减去②式得:f(n) - f(n-1) = f(n-1) ⇨ f(n) = 2 * f(n-1)
public class Test08 {
	public static void main(String[] args) {
		int c = jumpFloor(3);
		System.out.println("cases: " + c);
	}
	
	public static int jumpFloor(int target) {
		if (target < 0) {
			return 0;
		} else if (target == 1) {
			return 1;
		} else {
			return jumpFloor(target - 1) * 2;
		}
	}	
}

二进制中1的个数

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示

package ccnu.offer;

public class Test08 {
	public static void main(String[] args) {
//		System.out.println(Integer.bitCount(811));
		int one_bits = oneBits(811);// 2^9+2^8+32+8+2+1=512+256+43=768+43=811
		System.out.println(one_bits);
	}
		
	public static int oneBits(int i) {
		i = i - ((i >>> 1) & 0x55555555);
		i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
		i = (i + (i >>> 4)) & 0x0f0f0f0f;
		i = i + (i >>> 8);
		i = i + (i >>> 16);
		return i & 0x3f;
	}
	
//	 如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。
//	 举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011.我们发现减1的结果是把最右边的一个1开始的所有位都取反了。
//	这个时候如果我们再把原来的整数和减去1之后的结果做与运算,从原来整数最右边一个1那一位开始所有位都会变成0。如1100&1011=1000.也就是说,把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。 
	public static int oneBits1(int i) {
		int count = 0;
		while (i != 0) {
			count++;
			i = i & (i - 1);
		}
		return count;
	}
	
}

正整数n的阶层的最后一个非零整数值

def solution(n):
    if n <= 0:
        return 0
    res = 1
    for i in range(1, n+1):
        res *= i
        _, rest = divmod(res, 10)
        while rest == 0:  # 得到当前结果的最后一个非零值
            res, rest = divmod(res, 10)
        res = rest
    return res


def solution1(n):
    if n <= 0:
        return 0
    res = 1
    for i in range(1, n+1):
        res *= i
        res = int(str(res).strip('0')[-1])
    return res


if __name__ == '__main__':
    n = int(input())
    print(solution(n))
    print(solution1(n))


持续更新中......




剑指Offer——编程题的Java实现(更新完毕……) 剑指Offer——编程题的Java实现 阅读详情

相关推荐

牛客 剑指offer_编程题 详细题解 (已完结)

文章目录剑指offer_编程题【1.二维数组中的查找】【2.替换空格】C++JAVA【3.从尾到头打印链表】【4.重建二叉树】【5.用两个栈实现队列】【6.旋转数组的最小数字】暴力Sort二分法【7.斐波那契数列】【8.跳台阶】【9.变态跳台阶】 剑指offer_编程题 【1.二维数组中的查找】 【题目描述】 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都...

weixin_44211980的博客 4880

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

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

华辰烟雨的博客 6万+

Ansys Lumerical + HFSS + optiSLang 三剑客:手把手教你优化行波MZM调制器(附完整参数配置)

本文详细介绍了如何利用Ansys Lumerical、HFSS和optiSLang三款工具构建自动化协同设计流程,以优化行波马赫曾德尔调制器(TW-MZM)的性能。通过参数化仿真、流程集成与元模型技术,该方案能高效解决多物理场耦合挑战,实现调制带宽、驱动电压等多目标的全局优化,显著提升光子集成芯片的设计效率与性能潜力。

weixin_29251131的博客 586

《剑指offer》题解目录【67题全】

题目 博文链接 知识点 面试题1:赋值运算函数 题解 * 面试题2:实现singleton 题解 面试题3:二维数组中的查找 题解 * 面试题4:替换空格 题解 * 面试题5:从尾到头打印链表 题解 * 面试题6:重建二叉树 题解 * 面试题7:用两个栈实现队列 题解 * 面试题8:旋转数组的最小数字

iamxiaofeifei的博客 1062

UFS 3.1协议分析(第一至四章) -- UFS概述

Contents协议规范规范参考术语和定义简单概述通用特性接口特性功能特性 协议规范     UFS3.1协议规定了UFS电气接口和存储器件的特性以及系统架构。 特性:低功耗、高数据吞吐量、低电磁干扰、大容量存储器子系统效率的优化 电气接口:使用基于MIPI M-PHY的高级差分接口;M-PHY作为物理层,MIPI UniPro作为链路层,二者结合形成UFS接口的互联。 架构模型:参考 INCITS T10(SCSI) SAM 标准,命令协议基于 INCITS T1

Frank_sample的专栏 1万+

Cursor AI对话历史丢失?开源工具一键恢复项目聊天记录

在软件开发中,数据持久化与工作区管理是保障开发效率与上下文连续性的基础技术。其核心原理在于通过文件系统路径、数据库存储等机制,将应用状态与用户数据持久化关联。对于依赖AI辅助编程的开发者而言,对话历史是宝贵的项目上下文资产,记录了关键的算法思路、API使用范例和问题解决方案。然而,当开发工具(如基于VS Code的Cursor)采用基于项目绝对路径的工作区隔离机制时,项目路径的变更会导致历史对话看似“丢失”,实则是被隔离在了旧路径对应的数据沙箱中。这直接影响了开发体验与知识沉淀的效率。cursor-chat

weixin_26775679的博客 831

leecode剑指offer集合及题解(持续更新。。)

leecode剑指offer集合及题解剑指 Offer 03. 数组中重复的数字剑指 Offer 04. 二维数组中的查找剑指 Offer 06. 从尾到头打印链表剑指 Offer 07. 重建二叉树 剑指 Offer 03. 数组中重复的数字 题目:找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2

qq_40506747的博客 756

Apple Pay不能添加卡,不一定是卡的问题,有可能是设备的问题

Apple Pay不能添加卡,不一定是卡的问题,有可能是设备的问题。

wyxtx的博客 3440

算法之剑指offer题目总结

简介 剑指offer中的题目是面试中考察的重点,本篇文章对这些题目进行总结,方便日后阅读。 题目 题目顺序参考 leetcode 中出现的顺序。 1. 数组中重复的数字 2. 二维数组中的查找 3. 替换空格 4. 从尾到头打印链表 5. 重建二叉树 6. 用两个栈实现队列 7. 斐波那契数列 8. 青蛙跳台阶问题 9. 旋转数组的最小数字 10. 矩阵中的路径 解析 1. 数组中重复的数字 题目描述 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有

pl0321的博客 3570

Gemma 4 12B QAT+MTP小显存部署实战指南

大语言模型本地部署的核心瓶颈在于显存与推理效率的平衡。量化感知训练(QAT)通过在训练阶段模拟低精度计算,显著提升模型对INT4量化的鲁棒性;多令牌预测(MTP)则通过并行解码优化KV Cache复用,降低GPU kernel调用频次。二者协同可在8GB显存设备上稳定运行12B级模型,兼顾精度、速度与上下文长度。该方案适用于开发者本地AI助手、技术文档生成、SQL翻译等轻量但高交互需求场景,是当前Windows环境中小显存高效落地Gemma系列模型的工程最优解。

weixin_30934229的博客 377

【ue4】【新手入门】|静态网格模型碰撞设置和合并Actor(合并静态网格体)

上一期学到把构建好的房子模型变成一个静态网格体(也是一个模型)但是静态网格体是没有碰撞的 所以要给这个模型设置碰撞。

m0_63501513的博客 4420

[剑指offer]题解汇总与题目种类分类(C++纯享版!)

剑指offer大全写在前面题目题解表默写刷遇错集JT4---重建二叉树JT12---数值的整数次方JT14---链表中倒数第k个结点题目分类表月刷打卡与心得 写在前面 一般来说对于刷剑指offer分为几刷 速刷,不懂直接题解,获得正解。 默刷,看一遍题解,进行默写,进行巩固 日刷,每日三省吾身,隔日能刷方更进一步 月刷,在完成全部题目后,要时不时的进行回顾“思而不学则殆”,要一直动起来,刷起来,速度更是要快。“题刷百变,其意必现” 最后,我们才可以刷更多更有难度的题,但是万变不离其宗,最简单的剑指off

あなたの可愛い41 650

LeRobot 入门教程(二)强化学习训练及 SmolVLA 模型微调

本文介绍了LeRobot框架中基于人类在环的样本高效强化学习(HIL-SERL)工作流,包含真实机器人训练和模拟环境训练两大模块。在真实机器人部分,详细说明了从配置设置、工作空间边界确定、演示数据收集、奖励分类器训练到演员-学习者架构部署的全流程,并强调了人类干预的关键作用。同时介绍了适用于模拟训练的gym_hil环境及其配置使用方法。最后,文章提供了微调SmolVLA基础模型的指南,包括数据集收集、微调步骤和模型评估方法。该工作流实现了人机协作的高效强化学习,适用于各类机器人操作任务。

2506_90492529的博客 3897

「剑指offer」的刷题记录

link2nowcoder剑指offer编程题目合集 二维数组中的查找 | 有序就有二分,二分搜索降低复杂度,整体O(nlgn)| 三星题 class Solution { public: bool Find(int target, vector<vector<int> > array) { //逐个在首个元素其目标值小的数组里面进行二分...

wcm_lucky的博客 284

把 SAP Query 用到极致:ABAP Query 的核心概念、配置流程、权限与运输治理全解析

摘要:SAP Query 是一款面向业务用户的自助报表工具,可解决标准报表无法满足业务需求的问题。其核心由四大组件构成:Queries(报表定义)、InfoSets(数据视图)、User Groups(权限分组)和Translation(多语言支持)。通过SQ03、SQ02、SQ01事务码分步创建用户组、数据视图和查询,业务用户无需ABAP知识即可生成Basic List(明细)、Statistics(统计)和Ranked List(排名)三种报表形式。典型案例展示了如何为采购部门设计包含明细追溯和Top1

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 182

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

剑指offer刷题记录

剑指offer刷题记录 内容描述   本仓库链接:https://github.com/guyongpu/SwordOffer.git   本仓库为牛客网剑指offer题目的刷题记录,网址为:https://www.nowcoder.com/ta/coding-interviews ,点击跳转到剑指offer 每个题的代码放在src中,在main.cpp引入对应类的头文件,然后运行测试函数即可,例...

AlwaySimple的博客 411

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

剑指offer30天打卡活动(day16 - day19)

持续更新......

m0_74404678的博客 1170

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

牛客网剑指offer66道题(JS实现,部分题目含思路及拓展方法,持续更新)

【题1】二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路:(1)矩阵是有序的,从左向右递增,从上向下递减; (2)从左下角开始查找,比目标值大的,向上找;比目标值小的,向右找。 function Fi...

Delicia_Lani的博客 649

《剑指offer》66道算法题合集(java实现)

1

weixin_43774841的博客 2万+

牛客网-剑指offer编程题解答。

举个例子,数组{1,2,3,2,3} 当i=0时,index=numbers[i]=1, 小于length,index=1 numbers[index]=2 小于length,说明第一次访问 此时标记访问记录,numbers[index]=2+length; 即numbers[1]=2+length; 当i=1时,index=numbers[i]=2+length,大于ength,需要取得真实

dagon123的博客 842

剑指Offer编程题汇总(Java版)

将牛客网上剑指offer的编程题代码汇总一下,绝大部分是按自己思路写的代码,一部分题目还贴出了大牛们的快捷解法。祝好运! /* 剑指Offer编程题汇总 */ //1. //在一个二维数组中(每个一维数组的长度相同), //每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 public clas...

liyangxueit的博客 294

【周末闲谈】剑指offer,了解面试,学会面试

你是否在为未来可能到来的面试感到担心受怕,别害怕,足够的实力与充足的准备足以为你解决一切困难,本周的周末闲谈,我们来了解了解《剑指Offer》这本传奇一般的面试法典。

weixin_73602725的博客 1745

关于《剑指offer》的66道编程题的总结(四)

文章目录(第三十题)求1+2+3+----+n(有限制) (第三十题)求1+2+3±—+n(有限制) 2019年9月7日17:55:14 题目链接如下:

孤傲小二~阿沐的博客 6011

剑指Offer_编程题

剑指Offer_编程题 二维数组中的查找 题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 原题链接 例子: 输入: target : 9 1,2,4,5, 3,4,6,8, 4,7,8,10, 5,8,9,11, 7,11,12,14, 输出...

Veng的博客 365

剑指Offer_编程题(66题) 题解 C++版本

剑指Offer_编程题原题链接 题目目录&题解链接: 考点 题目 热度指数 通过率 数组 二维数组中的查找 157790 23.83% 字符串 替换空格 146574 24.56% 链表 从尾到头打印链表 127775 24.62% 树 重建二叉树 91028 23.02%...

DeathYmz的博客 1721

剑指offer打卡计划、建议(持续进行)

文章目录这个寒假,我们一起搞透剑指offer。 这个寒假,我们一起搞透剑指offer。 这个寒假笔者打算和大家一起开启刷题计划,先搞剑指offer。如果氛围可以可以持久搞leetcode。 至于刷题计划,因为剑指offer的牛客专题是67道有限的,我想着稍微高点强度的要把剑指offer先搞完。当然至于每天大概的计划还是要根据大部分人的具体情况分析。每晚我打算先把我的题解给大家参考一起讨论,然后把阶...

bigsai 8773
上一篇: 马踏棋盘问题(骑士周游问题)及其优化算法java实现
下一篇: Linux札记
mlee1018
博客等级 码龄12年 36粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值