【剑指offer】编程习题集附上答案
剑指offer~编程小哥令狐
一、数组类~
03、数组中重复的数字
![]() |
class Solution{public void swap(int[] nums,int i,int j){int temp=nums[i];nums[i]=nums[j];nums[j]=temp;}public int findRepeatNumber(int[] nums) {int n=nums.length;for(int num:nums)if(num<0||num>=n)return -1;for(int i=0;i<n;i++){while(nums[i]!=i&&nums[i]!=nums[nums[i]])swap(nums,i,nums[i]);if(nums[i]!=i&&nums[i]==nums[nums[i]])return nums[i];}return -1;}
}
04、二维数组中的查找
![]() |
- 暴力查找
class Solution {public boolean findNumberIn2DArray(int[][] matrix, int target) {int i,j;if((matrix==null||matrix.length==0)||(matrix.length==1&&matrix[0].length==0))return false;for (i=0;i<matrix.length;i++)for (j=0;j<matrix[0].length;j++)if(matrix[i][j]==target)return true;return false;}
}
- 线性查找
class Solution {public boolean findNumberIn2DArray(int[][] matrix, int target) {if((matrix==null||matrix.length==0)||(matrix.length==1&&matrix[0].length==0))return false;int i=0,j=matrix[0].length-1;while(i<=matrix.length-1&&j>=0){if(target==matrix[i][j]) return true;if(target>matrix[i][j]) i++;else if(target<matrix[i][j]) j--;}return false;}
}
05、顺时针打印矩阵
![]() |
class Solution {public int[] spiralOrder(int[][] matrix) {//判断边界if(matrix.length==0)return new int[0];//因为返回值是数组,所以实例化一个数组进行返回//右下左上int left=0,right=matrix[0].length-1,up=0,down=matrix.length-1;int num=0;int []res=new int[(right+1)*(down+1)];while(true){//右for(int i=left;i<=right;i++)res[num++]=matrix[up][i];if(++up>down) break;///判断边界//下for(int i=up;i<=down;i++)res[num++]=matrix[i][right];if(--right<left) break;//左for(int i=right;i>=left;i--)res[num++]=matrix[down][i];if(--down<up) break;//上for(int i=down;i>=up;i--)res[num++]=matrix[i][left];if(++left>right) break;}return res;}
}
06、在排序数组中查找数字
![]() |
- 暴力查找法
class Solution {public int search(int[] nums, int target) {int res=0;for(int i=0;i<nums.length;i++)if(nums[i]==target)res++;return res;}
}
- 二分查找法【有序数组优先考虑二分查找】
class Solution {public int search(int[] nums, int target) {int left = 0, right = nums.length;int ans = 0;while (left < right){int mid = left + ((right - left)/2);if (nums[mid] >= target){right = mid;} else {left = mid + 1;}}while (left < nums.length && nums[left++] == target){ans++;}return ans;}
}
07、剑指 Offer 53 - II. 0~n-1中缺失的数字
![]() |
class Solution {public int missingNumber(int[] nums) {int left = 0, right = nums.length;while(left < right){int mid = left + (right - left) / 2;if (nums[mid] == mid) {left = mid + 1;} else {right = mid;} }return left;}
}
二、链表类~
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 size=0;while(temp!=null){size++;temp=temp.next;}int[] res=new int[size];temp=head;for(int i=size-1;i>=0;i--){res[i]=temp.val;temp=temp.next;}return res;}
}
07、删除链表节点
![]() |
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/
class Solution {public ListNode deleteNode(ListNode head, int val) {if(head.val==val) return head.next;ListNode pre=head;ListNode cur=head.next;while(cur.val!=val&&cur!=null){pre=cur;cur=cur.next;}if(cur.val==val){pre.next=cur.next;}return head;}
}
【剑指offer】编程习题集附上答案相关推荐
- 牛客网剑指offer编程实践1-10题
牛客网剑指offer编程实践1-10题 1.二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这 ...
- 剑指offer编程题(JAVA实现)——第35题:数组中的逆序对
github https://github.com/JasonZhangCauc/JZOffer 剑指offer编程题(JAVA实现)--第35题:数组中的逆序对 题目描述 在数组中的两个数字,如果前 ...
- 剑指offer编程题(JAVA实现)——第38题:二叉树的深度
github https://github.com/JasonZhangCauc/JZOffer 剑指offer编程题(JAVA实现)--第38题:二叉树的深度 题目描述 输入一棵二叉树,求该树的深度 ...
- 2020-8-26 剑指offer编程小哥令狐 075211
剑指offer~编程小哥令狐 一.数组类~ 03.数组中重复的数字 class Solution{public void swap(int[] nums,int i,int j){int temp=n ...
- 剑指 offer 题目分析及答案
1. 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到头打印链表 7. 重建二叉树 8. 二叉树的下一个结点 9. 用两个栈实现队列 ...
- 剑指Offer——编程题的Java实现(更新完毕……)
目录 二维数组中的查找 替换空格 从尾到头打印链表 重建二叉树 用两个栈实现队列 用两个队列实现一个栈 旋转数组的最小数字 斐波那契数列 跳台阶 变态跳台阶 矩形覆盖 二进制中1的个数 数值的整数次方 ...
- 三天刷完《剑指OFFER编程题》--Java版本实现(第三天)
正在更新中......... 剑指offer --Python版本的实现: 剑指offer(1/3)第一大部分 剑指offer(2/3)第二大部分 剑指offer(3/3)第三大部分 -------- ...
- 剑指Offer——编程题的Java实现
声明:我写这个的意图是我在看书的过程中,就我掌握的内容做一个笔记,没有抄袭的意图.再次说明一下,我找工作的过程中并不顺利,没有像那些牛人们拿到一大把的Offer,我只是希望通过我自己的努力,不断提高自 ...
- 剑指 offer 编程题 C++ 版总结(中)
解题思路:从根结点开始向下进行对比,(1) 若两边的结点为空,返回 true.(2) 一个结点为空,而另一个结点不为空,此时二叉树不是对称的,返回 false.(3) 两边结点都不为空,但是结点的值不 ...
最新文章
- 解读Java Class文件格式
- uniapp中使用picker_uniapp 使用个推推送系统消息
- python中requests的常用方法_Python爬虫简介(2)——请求库的常用方法及使用,python,入门,二,requests,常见,和,库中,文官,网...
- rss spring 接口_spring 接口支持返回多种格式
- Typora主题定制及常用配置的设置方法
- 2017 Multi-University Training Contest - Team 6—HDU6098HDU6106HDU6103
- Spring boot 通过ApplicationRunner在启动完成后按指定顺序执行任务
- 自定义video控制栏,移动端可行
- OPERA固定价格学习
- Android模仿超级课表,展示多门课程重叠,页面有折角背景
- JavaSwing_2.2: JButton(按钮)
- 于的繁体字有几种写法_于字书法繁体字怎么写
- 表贴电阻尺寸与什么有关_贴片电阻简介:功率大小与尺寸对应表
- docker 暴露端口 查看_Docker容器如何暴露端口
- MATLAB NAR时间序列神经网络两种预测方法
- 跨平台APP----对Cordova,APPCan,DCloud,APICloud四大平台的分析(系列二)
- 华为RH2288做raid方法
- 百融云创被传赴港IPO急辟谣 旗下信贷业务存众多质疑
- 【Leetcode】431. Encode N-ary Tree to Binary Tree(困难)
- 【修炼七】团队建设-尊重