高阶面试-hw算法整理

坚持最近一个星期把每道题搞熟悉

文章目录

    • 1154一年中的第几天
    • [125. 验证回文串](https://leetcode.cn/problems/valid-palindrome/)
    • [344. 反转字符串](https://leetcode.cn/problems/reverse-string/)
    • [20. 有效的括号](https://leetcode.cn/problems/valid-parentheses/)
    • [392. 判断子序列](https://leetcode.cn/problems/is-subsequence/)
    • [409. 最长回文串](https://leetcode.cn/problems/longest-palindrome/)
    • [859. 亲密字符串](https://leetcode.cn/problems/buddy-strings/)
    • [14. 最长公共前缀](https://leetcode.cn/problems/longest-common-prefix/)
    • [1694. 重新格式化电话号码](https://leetcode.cn/problems/reformat-phone-number/)
    • [551. 学生出勤记录 I](https://leetcode.cn/problems/student-attendance-record-i/)
    • [1. 两数之和](https://leetcode.cn/problems/two-sum/)
    • [169. 多数元素](https://leetcode.cn/problems/majority-element/)
    • [53. 最大子数组和](https://leetcode.cn/problems/maximum-subarray/)
    • [1502. 判断能否形成等差数列](https://leetcode.cn/problems/can-make-arithmetic-progression-from-sequence/)
    • [88. 合并两个有序数组](https://leetcode.cn/problems/merge-sorted-array/)
    • [594. 最长和谐子序列](https://leetcode.cn/problems/longest-harmonious-subsequence/)
    • [643. 子数组最大平均数 I](https://leetcode.cn/problems/maximum-average-subarray-i/)
    • [463. 岛屿的周长](https://leetcode.cn/problems/island-perimeter/)
    • [234. 回文链表](https://leetcode.cn/problems/palindrome-linked-list/)
    • [21. 合并两个有序链表](https://leetcode.cn/problems/merge-two-sorted-lists/)
    • [141. 环形链表](https://leetcode.cn/problems/linked-list-cycle/)
    • [83. 删除排序链表中的重复元素](https://leetcode.cn/problems/remove-duplicates-from-sorted-list/)
    • [468. 验证IP地址](https://leetcode.cn/problems/validate-ip-address/)
    • [692. 前K个高频单词](https://leetcode.cn/problems/top-k-frequent-words/)

1154一年中的第几天

public int dayOfYear(String date) {// format YYYY-MM-DDint year = Integer.parseInt(date.substring(0, 4));int month = Integer.parseInt(date.substring(5, 7));int day = Integer.parseInt(date.substring(8));int[] daysOfMonthList = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};// 闰月if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {daysOfMonthList[1]++;}int daysBeforeThisMonth = 0;if (month > 1){for (int i = 0; i < month - 1; i++) {daysBeforeThisMonth += daysOfMonthList[i];}}return day+daysBeforeThisMonth;
}

125. 验证回文串

class Solution {public boolean isPalindrome(String s) {int n = s.length();int left = 0;int right = n-1;while(left < right){while(left < right && !Character.isLetterOrDigit(s.charAt(left))){left++;}while(left < right && !Character.isLetterOrDigit(s.charAt(right))){right--;}if(Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))){return false;}left++;right--;}return true;}
}

344. 反转字符串

class Solution {public void reverseString(char[] s) {// 双指针int left = 0;int right = s.length-1;while(left < right){char temp = s[left];s[left] = s[right];s[right] = temp;left++;right--;}}
}

20. 有效的括号

class Solution {public boolean isValid(String s) {// map {} 栈// checkif(s.isEmpty()){return true;}Map<Character,Character> map = new HashMap();map.put(']','[');map.put('}','{');map.put(')','(');Stack<Character> stack = new Stack();for(Character c: s.toCharArray()){if(map.containsKey(c)){// 说明有括号Character topElement = stack.isEmpty()?'#':stack.pop();if(map.get(c) != topElement){return false;}}else{stack.push(c);}}return stack.isEmpty();}
}

392. 判断子序列

class Solution {public boolean isSubsequence(String s, String t) {// 贪心 双指针int n = s.length();int m = t.length();int i =0, j=0;while(i<n && j<m){if(s.charAt(i) == t.charAt(j)){i++;}j++;}return i == n;}
}

409. 最长回文串

class Solution {public int longestPalindrome(String s) {// hash 偶数++ 奇数放中间只能1个Map<Character,Integer> counter = new HashMap();for( int i = 0; i< s.length(); i++){counter.merge(s.charAt(i),1,(a,b)->(a+b));}// 统计构造回文串的最大长度int res = 0, odd = 0 ;for(Map.Entry<Character,Integer> kv: counter.entrySet()){// 当前字符出现次数向下取偶数,并计入resint count = kv.getValue();int rem = count % 2;res += count - rem;// 如果当前字符出现次数是奇数,将odd置位1if(rem == 1){odd = 1;}}return res+odd;}
}

859. 亲密字符串

class Solution {public boolean buddyStrings(String s, String goal) {//check lenif (s.length() != goal.length()){return false;}// equalif (s.equals(goal)){int[] count = new int[26];for (int i = 0; i < s.length(); i++) {int assicCount = s.charAt(i)-'a';count[assicCount]++;//对应字母的频率if (count[assicCount] > 1){// 有重复,只要换重复的就一定相等return true;}}return false;}else {// first secondint first = -1;int second = -1;for (int i = 0; i < s.length(); i++) {// 只能有两个相同位置的字符不一样if (s.charAt(i) != goal.charAt(i)){if (first==-1){first = i;}else if (second==-1){second = i;}else {// 超过两个return false;}}}return (second != -1 && s.charAt(first) == goal.charAt(second) && s.charAt(second) == goal.charAt(first));}}
}

14. 最长公共前缀

class Solution {public String longestCommonPrefix(String[] strs) {// checkif(strs.length ==0){return "";}// 先排序 再比较头尾Arrays.sort(strs);int n = strs.length;String ans = "";for(int i = 0; i< strs[0].length();i++){if(strs[0].charAt(i) == strs[n-1].charAt(i)){ans += strs[0].charAt(i);}else{break;}}return ans;}
}

1694. 重新格式化电话号码

class Solution {public String reformatNumber(String number) {StringBuilder digits = new StringBuilder();for(int i = 0; i < number.length(); i++){char c = number.charAt(i);if(Character.isDigit(c)){digits.append(c);}}int n = digits.length();int currPt = 0;StringBuilder ans = new StringBuilder();while(n > 0){if(n > 4){ans.append(digits.substring(currPt,currPt+3)+"-");n -=3;currPt += 3;}else{if(n==4){ans.append(digits.substring(currPt,currPt+2)+"-"+digits.substring(currPt+2,currPt+4));}else {ans.append(digits.substring(currPt,currPt+n));}break;}}return ans.toString();}
}

551. 学生出勤记录 I

class Solution {public boolean checkRecord(String s) {return s.indexOf('A') == s.lastIndexOf('A') && !s.contains("LLL");}
}

1. 两数之和

class Solution {public int[] twoSum(int[] nums, int target) {// cacheMap<Integer,Integer> cache = new HashMap();for(int i=0;i<nums.length;i++){if(cache.containsKey(target-nums[i])){return new int[]{cache.get(target-nums[i]),i};}cache.put(nums[i],i);}return new int[]{};}
}

169. 多数元素

class Solution {public int majorityElement(int[] nums) {// checkif(nums.length <=2){return nums[nums.length-1];}// 排序后中间元素Arrays.sort(nums);return nums[nums.length/2];}
}

53. 最大子数组和

class Solution {public int maxSubArray(int[] nums) {//checkif(nums == null || nums.length==0){return 0;}int maxCurrent = nums[0]; // 当前元素的子数组和int maxGlobal = nums[0]; // 全局最大子数组和for(int i=1;i<nums.length;i++){// 人生的每个阶段,如果前一个阶段是负积累,及时抛弃,开启新篇章,否则持续积累// 选择当前元素作为新子数组的开始,或者将其添加到前一个元素的子数组中maxCurrent = Math.max(nums[i],maxCurrent+nums[i]);// 每个阶段都要做下总结,是否全局最优// 更新全局最大子数组和maxGlobal = Math.max(maxGlobal,maxCurrent);}return maxGlobal;}
}

1502. 判断能否形成等差数列

class Solution {public boolean canMakeArithmeticProgression(int[] arr) {if(arr.length ==2){return true;}Arrays.sort(arr);int res = arr[1]-arr[0];for(int i=2;i<arr.length;i++){if((arr[i]-arr[i-1]) != res){return false;}}return true;}
}

88. 合并两个有序数组

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {// 双指针int[] newNums = new int[m+n];int i = 0;int j = 0;int p = 0;while(i<m && j<n){if(nums1[i]<nums2[j]){newNums[p] = nums1[i];p++;i++;}else{newNums[p] = nums2[j];p++;j++;}}if(i<m){// 复制从i到m的元素过去System.arraycopy(nums1,i,newNums,p,m-i);}if(j<n){System.arraycopy(nums2,j,newNums,p,n-j);}// 拷贝到nums1System.arraycopy(newNums,0,nums1,0,m+n);}
}

594. 最长和谐子序列

class Solution {public int findLHS(int[] nums) {Map<Integer,Integer> map = new HashMap();for(int i = 0;i < nums.length;i++){map.put(nums[i],map.getOrDefault(nums[i],0)+1);}int ans = 0;for(int i: map.keySet()){if(map.containsKey(i-1)){ans = Math.max(ans,map.get(i)+map.get(i-1));}}return ans;}
}

643. 子数组最大平均数 I

class Solution {public double findMaxAverage(int[] nums, int k) {int sum = 0;int n = nums.length;for(int i=0;i<k;i++){sum += nums[i];}int maxSum = sum;for(int i=k;i<n;i++){sum = sum - nums[i-k] + nums[i];maxSum = Math.max(maxSum, sum);}return maxSum * 1.0/k;}
}

463. 岛屿的周长

class Solution {public int islandPerimeter(int[][] grid) {int perimeter = 0;int rows = grid.length;int cols = grid[0].length;for(int i=0;i<rows;i++){for(int j = 0; j< cols;j++){// 四个位置,水 或者 越界 再++if(grid[i][j] == 1){// 上方if(i==0 || grid[i-1][j] == 0){perimeter++;}// 下方if(i==rows-1 || grid[i+1][j]==0){perimeter++;}// 左侧if(j==0|| grid[i][j-1]==0){perimeter++;}// 右侧if(j==cols-1 || grid[i][j+1]==0){perimeter++;}}}}return perimeter;}
}

234. 回文链表

class Solution {public boolean isPalindrome(ListNode head) {if(head.next == null){return true;}// stackDeque<ListNode> stack = new ArrayDeque();ListNode newHead = head;while(head!=null){stack.push(head);head = head.next;}while(newHead != null){if(newHead.val != stack.pop().val){return false;}newHead = newHead.next;}return true;}
}

21. 合并两个有序链表

class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode dummy = new ListNode(-1);ListNode head = dummy;while(list1!=null && list2!=null){if(list1.val>list2.val){head.next = list2;head = head.next;list2 = list2.next;}else{head.next = list1;head = head.next;list1 = list1.next;}}while(list1!=null){head.next = list1;head = head.next;list1 = list1.next;}while(list2!=null){head.next = list2;head = head.next;list2 = list2.next;}return dummy.next;}
}

141. 环形链表

public class Solution {public boolean hasCycle(ListNode head) {// checkif(head == null){return false;}// 双指针ListNode fast = head;ListNode slow = head;while(fast.next != null && fast.next.next!= null){fast = fast.next.next;slow = slow.next;if(fast == slow ){return true;}}return false;}
}

83. 删除排序链表中的重复元素

class Solution {public ListNode deleteDuplicates(ListNode head) {if(head == null){return head;}ListNode cur = head;while(cur.next != null){if(cur.val == cur.next.val){cur.next = cur.next.next;}else{cur = cur.next;}}return head;}
}

468. 验证IP地址

class Solution {public String validIPAddress(String queryIP) {if (queryIP.indexOf(".") >= 0) {return isIPv4(queryIP) ? "IPv4" : "Neither";} else {return isIPv6(queryIP) ? "IPv6" : "Neither";}}private boolean isIPv4(String queryIP) {// 加-1防止出现空字符串无法计数 如192.168.1.1,后面多了个点,不加-1会被忽略后面的空串String[] split = queryIP.split("\\.",-1);//个数不是4个if (split.length != 4) {return false;}for (String s : split) {// 每个长度不在1-3之间if (s.length() > 3 || s.length() == 0) {return false;}// 有前导0 并且长度不为1if (s.charAt(0) == '0' && s.length() != 1) {return false;}// 计算数字int ans = 0;for (int j = 0; j < s.length(); j++) {char c = s.charAt(j);if (!Character.isDigit(c)) {return false;}ans = ans * 10 +(c - '0');}//数字超过255if (ans > 255) {return false;}}return true;}public boolean isIPv6(String queryIP) {String[] split = queryIP.split(":", -1);//数量不是8if (split.length != 8) {return false;}for (String s : split) {// 每个串 长度不是1-4之间if (s.length() > 4 || s.length() == 0) {return false;}for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);//不是数字且字母不在a-f之间if (!Character.isDigit(c) && !('a' <= Character.toLowerCase(c) && Character.toLowerCase(c) <= 'f')) {return false;}}}return true;}
}

正则太难了…

692. 前K个高频单词


class Solution {public List<String> topKFrequent(String[] words, int k) {Map<String, Integer> frequencyMap = new HashMap<>();for (String word : words) {frequencyMap.put(word, frequencyMap.getOrDefault(word, 0) + 1);}// 小顶堆PriorityQueue<WordFrequency> minHeap = new PriorityQueue<>();for (Map.Entry<String, Integer> entry : frequencyMap.entrySet()) {minHeap.offer(new WordFrequency(entry.getKey(), entry.getValue()));if (minHeap.size() > k) {minHeap.poll();}}List<String> result = new ArrayList<>();while (!minHeap.isEmpty()) {result.add(minHeap.poll().word);}Collections.reverse(result);return result;}public static class WordFrequency implements Comparable<WordFrequency> {String word;int frequency;public WordFrequency(String word, int frequency) {this.word = word;this.frequency = frequency;}@Overridepublic int compareTo(WordFrequency wordFrequency) {if (this.frequency != wordFrequency.frequency) {return Integer.compare(this.frequency, wordFrequency.frequency);} else {return wordFrequency.word.compareTo(this.word);}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/47081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】详解抽象类和接口的区别

一、抽象类和接口的主要区别表格 特性抽象类接口声明关键字abstractinterface声明访问修饰符public、protected、default&#xff08;不能用private&#xff09;public、default继承关键字extendsimplements变量跟普通类一样&#xff0c;可以包含实例变量、静态变量等 只能包含…

excel表怎么增乱序单词表 和正序单词表四六级要来了?!Excel帮你构建自己的单词库

excel表怎么增乱序单词表 和正序单词表四六级要来了&#xff1f;&#xff01;Excel帮你构建自己的单词库 1.背单词的第一步&#xff0c;当然是先上网找电子版的单词集。 盘搜搜 2. 建立 xls 格式的表格 3. 把下载的单词数据 复制到 表格 粘贴 4.新建一列 辅助列 生成随机数来…

murmurhash3算法的go语言实现

MurmurHash的定义 MurmurHash 是一种非加密型哈希函数&#xff0c;适用于一般的哈希检索操作。由Austin Appleby在2008年发明&#xff0c;并出现了多个变种&#xff0c;都已经发布到了公有领域(public domain)。与其它流行的哈希函数相比&#xff0c;对于规律性较强的key&…

网络编程-TCP/IP

网络概述 网络采用分而治之的方法设计&#xff0c;将网络的功能划分为不同的模块&#xff0c;以分层的形式有机组合在一起。 每层实现不同的功能&#xff0c;其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务&#xff0c;同时使用下层提供的服务 网络体系结构…

SpringMVC注解全解析:构建高效Web应用的终极指南 (上)

SpringMVC 是一个强大的 Web 框架&#xff0c;广泛应用于 Java Web 开发中。它通过注解简化了配置&#xff0c;增强了代码的可读性。本文将全面解析 SpringMVC 中常用的注解及其用法&#xff0c;帮助你构建高效的 Web 应用。 一. MVC介绍 MVC 是 Model View Controller 的缩写…

数字通云平台 智慧政务OA PayslipUser SQL注入漏洞复现

0x01 产品简介 数字通云平台智慧政务OA产品是基于云计算、大数据、人工智能等先进技术,为政府部门量身定制的智能化办公系统。该系统旨在提高政府部门的办公效率、协同能力和信息资源共享水平,推动电子政务向更高层次发展。 0x02 漏洞概述 数字通云平台 智慧政务OA Paysli…

在vue2中引入一个js文件, 在模版中不能使用js中的变量解决

在 Vue 2 中&#xff0c;如果你引入一个 JavaScript 文件&#xff0c;并希望在模板中使用该文件中的变量&#xff0c;通常有几个常见的问题和解决方法&#xff1a; 1. 作用域问题 在 Vue 模板中&#xff0c;只能访问到 Vue 实例中的数据和方法&#xff0c;而无法直接访问外部…

使用百度语音技术实现文字转语音

使用百度语音技术实现文字转语音 SpringBootVue前后端分离项目 调用api接口需要使用AK和SK生成AccessToken,生成getAccessToken的接口有跨域限制,所以统一的由后端处理了 部分参数在控制台->语音技术->在线调试里面能找到 Controller RestController RequestMapping(&q…

差分进化(Differential Evolution)算法

一、差分进化&#xff08;Differential Evolution&#xff09;算法的起源 差分进化算法&#xff08;DE&#xff09;是一种基于群体的进化算法&#xff0c;由Rainer Storn和Kenneth Price在1995年提出。它是一种全局优化算法&#xff0c;适用于处理多种优化问题&#xff0c;包括…

PostgreSQL的引号、数据类型转换和数据类型

一、单引号和双引号&#xff08;重要&#xff09;&#xff1a; 1、在mysql没啥区别 2、在pgsql中&#xff0c;实际字符串用单引号&#xff0c;双引号相当于mysql的,用来包含关键字&#xff1b; -- 单引号&#xff0c;表示user_name的字符串实际值 insert into t_user(user_nam…

浏览器跨tab页面通信方式总结

需求&#xff1a; 浏览器不同 tab 标签页之间是独立的&#xff0c; 如果要通信必须通过特殊手段来实现跨标签页通信。 1.StorageEvent 事件 当一个标签页 localStorage 变化时&#xff08;sessionStorage 无效&#xff09;&#xff0c;同源下另一个或其他所有标签页使用 DO…

python多级表头汇总

需求&#xff1a;将图一的数据展示为图二样式 图一&#xff1a; 图二&#xff1a; 图一具体的Excel截图 图二具体样式 python解决办法&#xff1a; # 导入 pandas 库&#xff0c;用于数据处理 import pandas as pd# 加载 Excel 文件 file_path 多级表头读取实例.xl…

科研绘图系列:R语言circos图(circos plot)

介绍 Circos图是一种数据可视化工具,它以圆形布局展示数据,通常用于显示数据之间的关系和模式。这种图表特别适合于展示分层数据或网络关系。Circos图的一些关键特点包括: 圆形布局:数据被组织在一个或多个同心圆中,每个圆可以代表不同的数据维度或层次。扇区:每个圆被划…

【BUG】已解决:SyntaxError invalid syntax

SyntaxError invalid syntax 目录 SyntaxError invalid syntax 【常见模块错误】 错误原因&#xff1a; 解决办法&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于…

C?C++?

c和C的区别主要是&#xff1a; 1、语言使用难度不同C难度大于C#大于C语言。 2、面向的对象不同C 语言是面向过程的&#xff0c;而 C 是面向对象的&#xff0c;C# 是一种完全面向对象的语言。 3、函数形式不同C 语言有标准的函数库&#xff0c;它们松散的&#xff0c;只是把功能…

图书馆定位导航:RFID、VR与AR技术在图书馆中的应用

图书馆作为知识的宝库&#xff0c;承载着无数求知者的梦想与期待&#xff0c;随着馆藏书籍数量的激增与图书馆布局的日益复杂&#xff0c;读者在寻找目标书籍往往有许多困难。传统的索引号查询方式虽能提供书籍的基本信息&#xff0c;但在寻找过程中&#xff0c;因不熟悉图书馆…

【Android】使用视图绑定ViewBinding来代替findViewById

文章目录 介绍作用用法开启ViewBinding功能自动生成绑定类在Activity中使用访问视图控件 区别 介绍 ViewBinding 是 Android 开发中的一个功能&#xff0c;它简化了访问视图的过程&#xff0c;避免了使用 findViewById 的繁琐步骤。它通过生成与布局文件相对应的绑定类&#xf…

CentOS 7 安装Jenkins2.346.1(war方式安装)

既然想要安装Jenkins&#xff0c;肯定是先要从官网解读所需环境配置信息&#xff0c;如需了解更多自行查阅 https://www.jenkins.io/doc/book/installing/linux/ JDK17&#xff0c;Maven3.9 安装 先从官网分别下载JDK17与Maven3.9 下载好之后上传至服务器、并解压&#xff1a…

算法学习day13(动态规划)

一、打家劫舍III 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 …

ubuntu 24 PXE Server (bios+uefi) 批量部署系统

pxe server 前言 PXE&#xff08;Preboot eXecution Environment&#xff0c;预启动执行环境&#xff09;是一种网络启动协议&#xff0c;允许计算机通过网络启动而不是使用本地硬盘。PXE服务器是实现这一功能的服务器&#xff0c;它提供了启动镜像和引导加载程序&#xff0c;…