剑指 Offer打卡 数组与矩阵
二维数组中的查找
public class Solution {public static void main(String[] args) {System.out.println(new Solution().Find(2, new int[][]{{1, 1}}));}public boolean Find(int target, int [][] array) {if(array == null || array.length == 0 || array[0].length == 0) {return false;}int rows = array.length, cols = array[0].length;int r = 0, c = cols - 1;while(r <= rows - 1 && c >= 0) {if(target == array[r][c]) {return true;} else if(target > array[r][c]) {r++;} else {c--;}}return false;}
}
数组中重复的数字
public class Solution {/*** 3. 数组中重复的数字* 要求时间复杂度 O(N),空间复杂度 O(1)。因此不能使用排序的方法,也不能使用额外的标记数组。** 对于这种数组元素在 [0, n-1] 范围内的问题,可以将值为 i 的元素调整到第 i 个位置上进行求解。在调整过程中,* 如果第 i 位置上已经有一个值为 i 的元素,就可以知道 i 值重复。** 以 (2, 3, 1, 0, 2, 5) 为例,遍历到位置 4 时,该位置上的数为 2,但是第 2 个位置上已经有一个 2 的值了,* 因此可以知道 2 重复** @param args*/public static void main(String[] args) {System.out.println(new Solution().duplicate(new int[]{2, 3, 1, 0, 2, 5}));}public int duplicate(int[] nums) {for (int i = 0; i < nums.length; i++) {while (nums[i] != i) {if (nums[i] == nums[nums[i]]) {return nums[i];}swap(nums, i, nums[i]);// 1 3 2 0 2 5// 3 1 2 0 2 5}swap(nums, i, nums[i]);// 0 1 2 3 2 5}return -1;}private void swap(int[] nums, int i, int j) {int t = nums[i];nums[i] = nums[j];nums[j] = t;}
}
替换空格
public class Solution {public static void main(String[] args) {System.out.println(new Solution().replaceSpace("1 2 3 3"));}/*** 替换空格** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** @param s string字符串* @return string字符串*/public String replaceSpace(String s) {StringBuffer result = new StringBuffer(s);int p1 = result.length() - 1;for (int i = 0; i <= p1; i++) {if (result.charAt(i) == ' ')//这里是两个空格哈result.append(" ");}int p2 = result.length() - 1;while (p1 >= 0 && p2 > p1) {char c = result.charAt(p1--);if (c == ' ') {result.setCharAt(p2--, '0');result.setCharAt(p2--, '2');result.setCharAt(p2--, '%');} else {result.setCharAt(p2--, c);}}return result.toString();}
}
第一个只出现一次的字符位置
/*** 在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置,* 如果没有则返回 -1(需要区分大小写).(从0开始计数)** @author inke219223m*/
public class Solution {public static void main(String[] args) {System.out.println(new Solution().firstUniqChar(""));System.out.println(new Solution().firstUniqChar("cc"));}public int FirstNotRepeatingChar1(String str) {int[] cnts = new int[128];for (int i = 0; i < str.length(); i++)cnts[str.charAt(i)]++;for (int i = 0; i < str.length(); i++)//条件 cnts[str.charAt(i)] == 1if (cnts[str.charAt(i)] == 1) return i;return -1;}public char FirstNotRepeatingChar(String s) {int[] cnts = new int[128];for (int i = 0; i < s.length(); i++)cnts[s.charAt(i)]++;for (int i = 0; i < s.length(); i++)//条件 cnts[str.charAt(i)] == 1if (cnts[s.charAt(i)] == 1) return s.charAt(i);return ' ';}public char firstUniqChar(String s) {if (s.equals("")) return ' ';int[] cnts = new int[128];for (int i = 0; i < s.length(); i++) {cnts[s.charAt(i)]++;}for (int i = 0; i < s.length(); i++) {if (cnts[s.charAt(i)] == 1)return s.charAt(i);}return ' ';}
}
顺时针打印矩阵
public class Solution {public static void main(String[] args) {System.out.println(new Solution().printMatrix(new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}));System.out.println(new Solution().spiralOrder(new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}));}public ArrayList<Integer> printMatrix(int[][] matrix) {ArrayList<Integer> ret = new ArrayList<>();int r1 = 0, r2 = matrix.length - 1, c1 = 0, c2 = matrix[0].length - 1;while (r1 <= r2 && c1 <= c2) {//上for (int i = c1; i <= c2; i++) {//第一行 [r1][i]ret.add(matrix[r1][i]);}//右for (int i = r1 + 1; i <= r2; i++) {ret.add(matrix[i][c2]);}if (r1 != r2) {//下for (int i = c2 - 1; i >= c1; i--) {ret.add(matrix[r2][i]);}}if (c1 != c2) {//左for (int i = r2 - 1; i > r1; i--) {ret.add(matrix[i][r1]);}}r1++;r2--;c1++;c2--;}return ret;}public int[] spiralOrder(int[][] matrix) {ArrayList<Integer> ret = new ArrayList<>();int r1 = 0, r2 = matrix.length - 1, c1 = 0, c2 = matrix[0].length - 1;while (r1 <= r2 && c1 <= c2) {//上for (int i = c1; i <= c2; i++) {//第一行 [r1][i]ret.add(matrix[r1][i]);}//右for (int i = r1 + 1; i <= r2; i++) {ret.add(matrix[i][c2]);}if (r1 != r2) {//下for (int i = c2 - 1; i >= c1; i--) {ret.add(matrix[r2][i]);}}if (c1 != c2) {//左for (int i = r2 - 1; i > r1; i--) {ret.add(matrix[i][r1]);}}r1++;r2--;c1++;c2--;}return ret.stream().mapToInt(Integer::valueOf).toArray();}
}
done
剑指 Offer打卡 数组与矩阵相关推荐
- 【有返回值的回溯法】剑指offer——面试题66:矩阵中的路径(回溯法)
剑指offer--面试题66:矩阵中的路径(回溯法) Solution:1 典型的回溯算法及代码 此题是回溯法的典型例题,思路以及代码均是书中所讲.要具体实现很有参考价值,借鉴之! 现在把书中代码贴在 ...
- 【剑指offer】数据结构——数组
目录 数据结构--数组 直接解 [剑指offer]03.数组中重复的数字 排序法 集合法 原地置换 [剑指offer]04. 二维数组中的查找 [剑指offer]29. 顺时针打印矩阵 [剑指offe ...
- 《LeetCode力扣练习》剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java
<LeetCode力扣练习>剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java 一.资源 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组 ...
- 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java
<LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...
- 剑指 Offer 11. 旋转数组的最小数字 简单
剑指 Offer 11. 旋转数组的最小数字 题目 解题思路 方法(一)直接遍历法 方法(二)二分查找法 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组 ...
- 剑指offer 11. 旋转数组的最小数字(很详细!)
剑指offer 11. 旋转数组的最小数字 题目 解题思路 代码 题目 解题思路 一开始,我们就能直接想到,数组找最小值,那么不轻轻松松直接遍历一遍,用一个变量记录最小值,然后直接返回不就完事了? 但 ...
- 【LeetCode】剑指 Offer 45. 把数组排成最小的数
[LeetCode]剑指 Offer 45. 把数组排成最小的数 文章目录 [LeetCode]剑指 Offer 45. 把数组排成最小的数 package offer;import java.uti ...
- 【LeetCode】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
[LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 文章目录 [LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 一.双指针 一.双指针 解题思路: ...
- 【LeetCode】剑指 Offer 11. 旋转数组的最小数字
[LeetCode]剑指 Offer 11. 旋转数组的最小数字 文章目录 [LeetCode]剑指 Offer 11. 旋转数组的最小数字 一.遍历 二.二分法 总结 一.遍历 算法步骤: 遍历数组 ...
最新文章
- c# dbgrid数据导出到xlsx和ini中实例
- python3 文本文件内容去除重复行
- java 输出ab_一道在知乎很火的 Java 题——如何输出 ab【转】
- 微服务介绍及Asp.net Core实战项目系列之微服务介绍
- 协议转换器的特点有哪些?
- 阿里云云效何勉:云原生是“精益实践”的最佳助力
- vs下使用qt设置应用程序的图标
- 四个DBHelper实现
- 深度学习的实用层面 —— 1.1 训练/开发/测试集
- springboot中动态获取bean工具类
- 求杨辉三角的前n行数据_它是高考热点,代表数学之美,还是编程狗的最爱——杨辉三角...
- Oracle数据备份和恢复
- Java中的ConcurrentModificationException
- Windows XP注册表修改精粹
- 计算机开机会跳过自检嘛,电脑开机怎样跳过自检
- php实现五维雷达图,【数据可视化·图表篇】雷达图
- SpringMVC:视图解析器(ViewResolver)
- 【如何快速搭建企业级的WAF防火墙】
- AWS两个VPC网络互通
- 容器编排的作用和要实现的内容
热门文章
- 直播 | WWW 2021论文解读:基于隐私保护的模型联邦个性化
- 立足前沿 直击热点 搭建平台,2018中国人工智能大会在深圳拉开帷幕
- GAN做图像翻译的一点总结
- 深度强化学习实战:Tensorflow实现DDPG - PaperWeekly 第48期
- dp进阶之FFT加速+数据结构优化+不等式优化
- 修改小程序swiper 点的样式_请问微信小程序swiper切换的点如何修改样式。
- photon四种同步方式_【Linux】多线程同步的四种方式
- mongodb导出查询结果
- Spring Security——集成Spring Session、Redis和JSON序列化解决方案
- 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第二章——自编解析与答案