给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
- public int removeElement(int[] nums, int val) {
- int slow=0;
- for(int fast=0;fast
- if(nums[fast]!=val){
- nums[slow]=nums[fast];
- slow++;
- }
- }
- return slow;
- }
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
- public void reverseString(char[] s) {
- int slow=0,fast=s.length-1;
- while (slow<=fast){
- char temp=s[slow];
- s[slow]=s[fast];
- s[fast]=temp;
- slow++;
- fast++;
- }
- }
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
- 如果剩余字符少于
k 个,则将剩余字符全部反转。 - 如果剩余字符小于
2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"
- public String reverseStr(String s, int k) {
- char[] ch = s.toCharArray();
- // 1. 每隔 2k 个字符的前 k 个字符进行反转
- for (int i = 0; i< ch.length; i += 2 * k) {
- // 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
- if (i + k <= ch.length) {
- reverse(ch, i, i + k -1);
- continue;
- }
- // 3. 剩余字符少于 k 个,则将剩余字符全部反转
- reverse(ch, i, ch.length - 1);
- }
- return new String(ch);
-
- }
- // 定义翻转函数
- public void reverse(char[] ch, int i, int j) {
- for (; i < j; i++, j--) {
- char temp = ch[i];
- ch[i] = ch[j];
- ch[j] = temp;
- }
- }
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:
- 更改数组
nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。 - 返回
k 。
- public int removeDuplicates(int[] nums) {
- int slow=0;
- for(int fast=0;fast
- if(nums[fast]!=nums[slow]){
- slow++;
- nums[slow]=nums[fast];
- }
- }
- return slow+1;
- }
-
相关阅读:
如何对需求变更进行精准的风险评估?
Pixel3系统提取镜像备份并还原到另一台手机
虚拟机的发展史:从分时系统到容器化
python安装的第三方库
蓝桥杯刷题7
微服务架构改造案例
【校招VIP】网络基础之cookie、session和storage
数据化运营09 抓住问题关键:用相关性分析拆解多个影响因素
复旦EMBA美东国际课程走进哈佛、耶鲁、麻省理工、哥大等顶尖名校
【一天一点.NET小知识】运用向量Vector<T>加速求和计算
-
原文地址:https://blog.csdn.net/qq_43649937/article/details/138160312