二维数组中的查找

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打卡 数组与矩阵相关推荐

  1. 【有返回值的回溯法】剑指offer——面试题66:矩阵中的路径(回溯法)

    剑指offer--面试题66:矩阵中的路径(回溯法) Solution:1 典型的回溯算法及代码 此题是回溯法的典型例题,思路以及代码均是书中所讲.要具体实现很有参考价值,借鉴之! 现在把书中代码贴在 ...

  2. 【剑指offer】数据结构——数组

    目录 数据结构--数组 直接解 [剑指offer]03.数组中重复的数字 排序法 集合法 原地置换 [剑指offer]04. 二维数组中的查找 [剑指offer]29. 顺时针打印矩阵 [剑指offe ...

  3. 《LeetCode力扣练习》剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java

    <LeetCode力扣练习>剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java 一.资源 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组 ...

  4. 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java

    <LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...

  5. 剑指 Offer 11. 旋转数组的最小数字 简单

    剑指 Offer 11. 旋转数组的最小数字 题目 解题思路 方法(一)直接遍历法 方法(二)二分查找法 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组 ...

  6. 剑指offer 11. 旋转数组的最小数字(很详细!)

    剑指offer 11. 旋转数组的最小数字 题目 解题思路 代码 题目 解题思路 一开始,我们就能直接想到,数组找最小值,那么不轻轻松松直接遍历一遍,用一个变量记录最小值,然后直接返回不就完事了? 但 ...

  7. 【LeetCode】剑指 Offer 45. 把数组排成最小的数

    [LeetCode]剑指 Offer 45. 把数组排成最小的数 文章目录 [LeetCode]剑指 Offer 45. 把数组排成最小的数 package offer;import java.uti ...

  8. 【LeetCode】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

    [LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 文章目录 [LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 一.双指针 一.双指针 解题思路: ...

  9. 【LeetCode】剑指 Offer 11. 旋转数组的最小数字

    [LeetCode]剑指 Offer 11. 旋转数组的最小数字 文章目录 [LeetCode]剑指 Offer 11. 旋转数组的最小数字 一.遍历 二.二分法 总结 一.遍历 算法步骤: 遍历数组 ...

最新文章

  1. c# dbgrid数据导出到xlsx和ini中实例
  2. python3 文本文件内容去除重复行
  3. java 输出ab_一道在知乎很火的 Java 题——如何输出 ab【转】
  4. 微服务介绍及Asp.net Core实战项目系列之微服务介绍
  5. 协议转换器的特点有哪些?
  6. 阿里云云效何勉:云原生是“精益实践”的最佳助力
  7. vs下使用qt设置应用程序的图标
  8. 四个DBHelper实现
  9. 深度学习的实用层面 —— 1.1 训练/开发/测试集
  10. springboot中动态获取bean工具类
  11. 求杨辉三角的前n行数据_它是高考热点,代表数学之美,还是编程狗的最爱——杨辉三角...
  12. Oracle数据备份和恢复
  13. Java中的ConcurrentModificationException
  14. Windows XP注册表修改精粹
  15. 计算机开机会跳过自检嘛,电脑开机怎样跳过自检
  16. php实现五维雷达图,【数据可视化·图表篇】雷达图
  17. SpringMVC:视图解析器(ViewResolver)
  18. 【如何快速搭建企业级的WAF防火墙】
  19. AWS两个VPC网络互通
  20. 容器编排的作用和要实现的内容

热门文章

  1. 直播 | WWW 2021论文解读:基于隐私保护的模型联邦个性化
  2. 立足前沿 直击热点 搭建平台,2018中国人工智能大会在深圳拉开帷幕
  3. GAN做图像翻译的一点总结
  4. 深度强化学习实战:Tensorflow实现DDPG - PaperWeekly 第48期
  5. dp进阶之FFT加速+数据结构优化+不等式优化
  6. 修改小程序swiper 点的样式_请问微信小程序swiper切换的点如何修改样式。
  7. photon四种同步方式_【Linux】多线程同步的四种方式
  8. mongodb导出查询结果
  9. Spring Security——集成Spring Session、Redis和JSON序列化解决方案
  10. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第二章——自编解析与答案